在打字稿中,拥有像这样的“{[x:string]:any}”这样的对象属性意味着什么?

时间:2015-10-19 20:01:02

标签: javascript typescript visual-studio-code hybrid

var x : { id: number, [x: string]: any }; // what does second property means?

x = { id: 1, fullname: "Zia" , 32 : "Khan" }; // no errors in VS Code v0.9.1.

如果第二个属性的类型为数组且其索引的类型为字符串返回值属于任何类型,那么它如何接受索引类型为数字类型为即可。

TypeScript版本:1.6.2

Visual Studio代码版本:0.9.1

2 个答案:

答案 0 :(得分:3)

  

在打字稿中,拥有像这样的“{[x:string]:any}”这样的对象属性意味着什么?

这些称为索引签名。它们包含在手册中:http://www.typescriptlang.org/Handbook

签名[x:string]:any基本上是说使用字符串的任何索引访问的类型是any

答案 1 :(得分:3)

我们说我们有这个变量声明:

var x : { 
    id: number, 
    [index: string]: number  // This is not an object property! Note the brackets.
}; 

声明的含义是:您可以为变量 x 分配一个数字属性为 id 的对象,如果您访问 x 通过索引(即x["something"]),返回值必须为数字。

所以你可以写:

x.id = 10;    // but not x.id = "Peter";
x["age"] = 20 // but not x["age"] = "old"

现在回到你的例子:

var x : { id: number, [x: string]: any }; // what does second property means?
x = { id: 1, fullname: "Zia", 32 : "Khan" }; // no errors in VS Code v0.9.1.

fullname是一个有效的对象属性,因为您定义x可以作为数组访问。奇怪的是,32索引的原因是相同的(尽管我希望这里只允许字符串索引)。