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

Typescript推断返回的数组类型元素,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'); 值的类型为(字符串|编号)[。如何根据传递的键将其更改为动态?因此,在上面

我有以下功能:

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');

值的类型为
(字符串|编号)[
。如何根据传递的键将其更改为动态?因此,在上面的例子中,我希望类型是
[number,string]

在元组上使用映射类型

const数据={
id:1,
名称:“”,
}
数据类型=数据类型;
类型DataKeyType=keyof(数据类型);
类型DataFieldType=T扩展DataKeyType?数据[T]:从不;
类型MappedDataTuple={
[K in keyof T]:数据字段类型;
}
函数getKeysValues(…键:T):MappedDataTuple{
返回keys.map(k=>data[k]);
}
//常量值:[数字,字符串]
const value=getKeysValues('id','name');

最简单的方法是:

function getKeysValues(...keys: Array<keyof typeof data>): Array<typeof data[keyof typeof data]> {
    return keys.map(k => data[k]);
}

谢谢,这很好用。还有一个选项可以推断对象而不是数组的返回类型?像{id:number,name:string}是的,它是。参见Pick type谢谢,我将其更改为Pick,但它仍然是一个对象元组。type DataFieldType=T是否扩展了状态?选择:从不;类型MappedDataTuple={[K in keyof T]:DataFieldType;}实际上我只需要这个:pick(…keys:K[]):pick
function getKeysValues(...keys: Array<keyof typeof data>): Array<typeof data[keyof typeof data]> {
    return keys.map(k => data[k]);
}
function getKeysValues<K extends keyof typeof data>(...keys: Array<K>): Array<typeof data[K]> {
    return keys.map(k => data[k]);
}
type Data = typeof data;
// then
function getKeysValues(...keys: Array<keyof Data>): Array<Data[keyof Data]>;
// or
function getKeysValues<K extends keyof Data>(...keys: Array<K>): Array<Data[K]>;