Generics 对象值参数的泛型类型 函数getValues(对象:U):T[]{ // ... } 常数测试={a:123,b:234}; 常量值=获取值(测试);
在上面的代码中,我希望Generics 对象值参数的泛型类型 函数getValues(对象:U):T[]{ // ... } 常数测试={a:123,b:234}; 常量值=获取值(测试);,generics,typescript,types,typescript2.0,Generics,Typescript,Types,Typescript2.0,在上面的代码中,我希望值的类型是number[],但实际的类型是{}[] 我做错了什么?此{a:123,b:234}对象的类型是: { a: number; b: number; } 而不是 { [key: string]: number } 你可以做: const test = { "a": 123, "b": 234 } as { [key: string]: number }; 告诉编译器它确实是您想要的。 但即使这样,您仍然无法获得所需的值的类型: const values = g
值
的类型是number[]
,但实际的类型是{}[]
我做错了什么?此
{a:123,b:234}
对象的类型是:
{ a: number; b: number; }
而不是
{ [key: string]: number }
你可以做:
const test = { "a": 123, "b": 234 } as { [key: string]: number };
告诉编译器它确实是您想要的。但即使这样,您仍然无法获得所需的
值的类型:
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);
函数getValues(对象:{[key:string]:T}):T[]{
返回null;
}
const test={a:123,“b:234}作为{[key:string]:number};
常量值=获取值(测试);
()太好了,谢谢,这很有效<但是,代码>测试不需要强制转换为
{[key:string]:number}
,因为TypeScript 2推断所有值都是number
类型,并且与函数的签名正确匹配。您的示例将在没有强制转换TypeScript 2.Right的情况下运行。我不知道你正在使用typescript 2,但我很高兴你能删除这个丑陋的断言。