我在打字稿中的以下定义中出错了,我可以知道是什么问题吗?
interface Dictionary {
[index: string]: string;
length: number;
}
答案 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