在打字稿中,拥有一个像这样的对象 属性 “{ [x: string]: any }” 意味着什么?
In typescript what does it means to have an object property like this "{ [x: string]: any }"?
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
如果第二个属性是Array类型,它的index是string 并且 return value 是类型 any 那么它如何接受 index 是 number 类型,value 是 string?
类型
TypeScript 版本:1.6.2
Visual Studio代码版本:0.9.1
In typescript what does it means to have an object property like this { [x: string]: any }
?
这些称为 索引签名。它们包含在 TSLang Handbook.
中
签名 [x: string]: any
基本上是说使用字符串的任何索引访问的类型是 any
.
假设我们有这个变量声明:
var x : {
id: number,
[index: string]: number // This is not an object property! Note the brackets.
};
声明的意思是:你可以给变量x赋值一个数值为属性的对象id 并且如果您通过索引(即 x["something"]
)访问 x,则 return 值 必须为数字 .
所以你可以这样写:
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
索引出于同样的原因是有效的(尽管我希望这里只允许字符串索引)。
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
如果第二个属性是Array类型,它的index是string 并且 return value 是类型 any 那么它如何接受 index 是 number 类型,value 是 string?
类型TypeScript 版本:1.6.2
Visual Studio代码版本:0.9.1
In typescript what does it means to have an object property like this
{ [x: string]: any }
?
这些称为 索引签名。它们包含在 TSLang Handbook.
中 签名 [x: string]: any
基本上是说使用字符串的任何索引访问的类型是 any
.
假设我们有这个变量声明:
var x : {
id: number,
[index: string]: number // This is not an object property! Note the brackets.
};
声明的意思是:你可以给变量x赋值一个数值为属性的对象id 并且如果您通过索引(即 x["something"]
)访问 x,则 return 值 必须为数字 .
所以你可以这样写:
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
索引出于同样的原因是有效的(尽管我希望这里只允许字符串索引)。