Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 对象值参数的泛型类型 函数getValues(对象:U):T[]{ // ... } 常数测试={a:123,b:234}; 常量值=获取值(测试);_Generics_Typescript_Types_Typescript2.0 - Fatal编程技术网

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,但我很高兴你能删除这个丑陋的断言。