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

时间:2017-10-02 19:07:12

标签: typescript typescript-typings typescript2.0

我正在尝试为此功能编写签名:

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}>。我无法弄清楚如何使用打字稿来做到这一点。

1 个答案:

答案 0 :(得分:4)

您可以使用lookup types。类型T具有keyof T类型的键和类型T[keyof T]的值。因此,您的函数将输入如下:

export function objToArray<T>(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;
}

希望有所帮助;祝你好运!