通用类型的对象值参数

时间:2016-08-21 14:21:23

标签: generics typescript types typescript2.0

function getValues<T, U extends { [key: string]: T }>(object: U): T[] {
    // ...
}

const test = { a: 123, b: 234 };
const values = getValues(test);

在上面的代码中,我希望values的类型为number[],但实际类型为{}[]

我做错了什么?

1 个答案:

答案 0 :(得分:2)

{ a: 123, b: 234 }对象的类型为:

{ a: number; b: number; }

而不是

{ [key: string]: number }

你可以这样做:

const test = { "a": 123, "b": 234 } as { [key: string]: number };

告诉编译器它确实是你想要的 但即便如此,你仍然无法获得values所需的类型:

const values = getValues(test); // type of values {}[]

你应该这样做:

function getValues<T>(object: { [key: string]: T }): T[] {
    return null;
}

const test = { "a": 123, "b": 234 } as { [key: string]: number };
const values = getValues(test);

code in playground