我有以下功能:
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/