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

How do I refer a value of an object as a generic in typescript?

我正在尝试为此函数编写签名:

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 类型对象,我想 return Array<U & {objKey: string}>。我不知道如何使用打字稿来做到这一点。

您可以使用 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;
}

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