TypeScript接口定义类型错误

时间:2015-11-10 03:41:56

标签: typescript

我在打字稿中的以下定义中出错了,我可以知道是什么问题吗?

interface Dictionary {
[index: string]: string;
length: number; 
}

2 个答案:

答案 0 :(得分:1)

Dictionary界面中

[index: string]: string;

被称为字符串索引签名,并告诉编译器Dictionary的所有属性必须是string类型。您通常会使用索引签名来避免使用混合类型的数组。

那么这样做就可以了:

let d: Dictionary;
d["foo"] = "bar";

但这会产生编译错误:

let d: Dictionary;
d["foo"] = 1000;

您可以定义Dictionary的属性,只要您定义的每个属性都是string类型。例如,这没关系:

interface Dictionary {
    [index: string]: string;
    foo: string;
}

并允许你这样做:

let d: Dictionary;
d.foo = "bar";

但在您的情况下,在您已经告诉编译器所有属性都是length类型之后,您尝试将名为number的属性定义为string。这就是你遇到编译器错误的原因。

答案 1 :(得分:0)

请参阅array types上的TypeScript文档。所有属性必须具有相同的返回类型,因此您无法在接口上使用返回类型编号声明长度。

要获取数组的长度,可以转换回通用数组类型:

    (<Array<any>>yourArray).length