如何在打字稿中将对象的值引用为泛型?

问题描述 投票:0回答:1

我正在尝试为这个功能写一个签名:

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}>
。我不知道如何用打字稿做到这一点。

typescript typescript-typings typescript2.0
1个回答
5
投票

您可以使用索引访问类型

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.