在 TypeScript 中,对象的键类型可以使用两种不同的语法表示:
-
字符串索引签名(String Index Signature):使用
[key: string]
表示,其中key
是你希望用作对象键的名称。这种语法表示对象可以包含任何字符串作为键,而不限定特定的键名。 -
特定键名(Specific Key Name):使用
[name: string]
表示,其中name
是你希望对象具有的特定键名之一。这种语法表示对象应该具有一个名为name
的属性,并且该属性的键类型应该是字符串。
例如,const allGlobalComponents: { [name: string]: Component } = { SvgIcon };
使用了特定键名语法。这意味着 allGlobalComponents
对象应该具有一个名为 name
的属性,该属性的键类型应该是字符串,而值类型是 Component
。这种语法通常用于对象中包含一组特定名称的属性,而不是任意字符串作为键。
如果只是使用了 [string]
,那么会报错:A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type.
,所以 const allGlobalComponents: { [string]: Component } = { SvgIcon };
的写法是会报错的,尽管也能正常输出。