将“属性”命名为对象形状中的任何随机名称

时间:2019-10-25 05:13:42

标签: javascript typescript

我是TypeScript的新手,只是语法上的一个问题,我看到了一些代码,例如定义这样的传递参数:

{ [property: string]: any}

我在这里有点困惑,我明白了这个参数必须针对一个对象,而其属性必须是字符串。但是我实际上可以将“属性”命名为任意随机名称,例如:

{ [SomeNonSenseName: string]: any}

它的工作方式仍然与以前完全相同,因此属性名称实际上并不重要,我们也不会引用该属性名称,这是打字稿设计的弱点吗?

2 个答案:

答案 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 }