我正在尝试为这个功能写一个签名:
export function objToArray(obj){
let ret = [];
for(const key of Object.keys(obj)){
ret.push(Object.assign({objKey: key.toString()}, obj[key]));
}
return ret;
}
所以对于包含 U 类型值的 T 类型对象,我想返回
Array<U & {objKey: string}>
。我不知道如何用打字稿做到这一点。
您可以使用索引访问类型。
T
类型具有 keyof T
类型的键和 T[keyof T]
类型的值。因此,您的函数将像这样输入:
export function objToArray<T extends object>(
obj: T): Array<T[keyof T] & { objKey: string }>{
let ret = [];
// Object.keys() returns `string[]` but we will assert as `Array<keyof T>`
for(const key of Object.keys(obj) as Array<keyof T>){
ret.push(Object.assign({objKey: key.toString()}, obj[key]));
}
return ret;
}