我是TypeScript的新手,只是语法上的一个问题,我看到了一些代码,例如定义这样的传递参数:
{ [property: string]: any}
我在这里有点困惑,我明白了这个参数必须针对一个对象,而其属性必须是字符串。但是我实际上可以将“属性”命名为任意随机名称,例如:
{ [SomeNonSenseName: string]: any}
它的工作方式仍然与以前完全相同,因此属性名称实际上并不重要,我们也不会引用该属性名称,这是打字稿设计的弱点吗?
答案 0 :(得分:0)
语法{ [property: string]: any}
定义了Indexable Type
我们还可以描述我们可以“索引”到的类型,例如a [10]或ageMap [“ daniel”]。可索引类型具有索引签名,该签名描述了我们可以用来对对象建立索引的类型,以及建立索引时对应的返回类型。
受支持的索引签名有两种类型:字符串和数字。
在您的情况下,这意味着您有一个可以具有一组属性的对象,并且每个属性均为any
类型。
您使用的property
单词是索引器签名的一部分,而不是预期属性的名称。
let user: { [property: string]: any} = { name: 'John', age: 30};
console.log(user['name'])
console.log(user['age'])
user['city'] = 'NY'
console.log(user['city'])
答案 1 :(得分:0)
所以属性名称实际上并不重要,我们也不会引用该属性名称
正确,但是它确实要求索引属性键的类型为字符串。您也可以显式定义其他属性
值得注意的是,此名称可用于文档目的,例如,如果您有一个值的参数字典,则可以使用{ [argName: string]: string }