...它在哪里记录?
我到处都看到过这样的例子:
class MyThing {
private _layers: { [id: string] : SimpleLayer } = {};
...
}
。这很好,这很好,但语法让我感到困惑。
什么是"id"?为什么语法不仅仅是blah:{string:SimpleLayer},这不起作用。我还看到了{[name: string]:Type}和{[index:string]:Type}。
我一直在查看 typescriptlang.org 试图找到实际记录的位置,但我似乎根本找不到它。
TypeScript: Index Signatures
定义索引的语法为:
{ [Identifier: KeyType]: ValueType }
KeyType
可以是string
的,也可以是number
的。
你可以声称Identifier
并不是真正需要的,因为它在任何地方都没有使用,但我认为这是必需的,以便强制类/接口设计者指示哈希映射键应该代表什么(ID、名称、电子邮件地址等)。这也提供了让 intellisense 显示哈希键名称的可能性(就像 Visual Studio 对其他语言所做的那样),尽管我认为 Typescript intellisense 目前不提供这一点。
关于你为什么语法不简单的问题,特别是像blah:{string:SimpleLayer}
这样的东西:
因为这将是模棱两可的。此语法已存在并具有以下含义:
var x: { string: SimpleLayer }
这将声明一个变量x
。x
的类型有一个名为 string
的属性,该属性的类型为 SimpleLayer
。如果我想使用 x
,我会这样做:
x.string = new SimpleLayer;
如果我们使用真实的例子会更明显:
var circle: {radius: number}
这声明了一个带有一个属性(radius
)的变量,它是number
类型,它没有声明radius
类型到number
类型的哈希映射。