typescript 推断返回的数组类型元素

标签 typescript

我有以下功能:

const data = {
  id: 1,
  name: '',
}

type keysType = keyof(typeof data);

function getKeysValues(...keys: keysType[]) {
  return keys.map(k => data[k]);
}

const value = getKeysValues('id', 'name');

value 的类型是(string | number)[]。如何根据传递的 key 将其更改为动态?因此,在上述情况下,我希望类型为 [number, string]

最佳答案

在元组上使用映射类型 TypeScript 3.1

const data = {
  id: 1,
  name: '',
}

type Data = typeof data;
type DataKeysType = keyof(typeof data);
type DataFieldType<T> = T extends DataKeysType ?  Data[T] : never;

type MappedDataTuple<T extends DataKeysType[]> = {
    [K in keyof T]: DataFieldType<T[K]>;
}

function getKeysValues<T extends DataKeysType[]>(...keys: T): MappedDataTuple<T> {
  return <any>keys.map(k => data[k]);
}

// const value: [number, string]
const value = getKeysValues('id', 'name');

关于 typescript 推断返回的数组类型元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56947620/

相关文章:

javascript - TypeScript - FormData 循环遍历元素(使用 getAll() 或entrys())

reactjs - 如何在 typescript 中使用 React useRef 钩子(Hook)?

javascript - Typescript 过滤并返回单个键

javascript - Angular Reactive Forms 验证的奇怪错误

javascript - 设置 div 元素的 top 属性

Typescript 多种类型定义

typescript - 如何在泛型参数上使用类型断言

javascript - 为什么 Jasmine 测试中不会抛出错误?

javascript - 如何在同一对象键下存储不同类型的函数?

string - 奇怪的 typescript 字符串枚举无法从字符串解析