我是打字稿的新手,只是一个关于语法的问题,我看到了一些代码,比如定义这样的传递参数:{ [property: string]: any}我在这里有点困惑,我明白这个参数必须是一个对象并且它的属性必须是字符串。但我实际上可以将“财产”命名为任何随机名称,例如:{ [SomeNonSenseName: string]: any}它仍然以与以前完全相同的方式工作,因此属性名称实际上并不重要,我们不会引用此属性名称,这是打字稿的弱设计吗?
2 回答
哔哔one
TA贡献1854条经验 获得超8个赞
语法{ [property: string]: any}定义了可索引类型
我们还可以描述我们可以“索引到”的类型,例如 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'])
梦里花落0921
TA贡献1772条经验 获得超6个赞
所以属性名称实际上并不重要,我们不会引用这个属性名称
正确,但是它确实强制索引的属性键是字符串类型。您也可以明确定义其他属性
值得注意的一件事是,此名称可用于文档目的,例如,如果您有一个值的参数字典,您可能会这样做 { [argName: string]: string }
添加回答
举报
0/150
提交
取消