......它在哪里记录?
我在这个地方看过这样的例子:
class MyThing {
private _layers: { [id: string] : SimpleLayer } = {};
...
}
......这很有用,这很棒,但语法让我感到困惑。
什么是'id'?为什么语法不仅仅是等等:{string:SimpleLayer},不起作用。我还看到{[name:string]:Type}和{[index:string]:Type}。
我一直在寻找typescriptlang.org试图找到实际记录的位置,但我似乎根本找不到它。
答案 0 :(得分:35)
http://blogs.msdn.com/b/typescript/archive/2013/01/24/interfaces-walkthrough.aspx
请参阅“描述可索引对象”部分。这称为index signature。
语法为:
[Identifier: KeyType]: ValueType
KeyType
可以是string
或number
。
您可以声称Identifier
并不是真的需要,因为它不会在任何地方使用,但我认为这是强制类/接口设计器指示哈希映射键应该表示什么所必需的(身份证,姓名,电子邮件地址等)。这也提供了intellisense显示散列键名称的可能性(正如Visual Studio对其他语言所做的那样),尽管我不认为Typescript intellisense当前提供了这个。
答案 1 :(得分:2)
关于为什么语法不简单的问题,特别是像blah:{string:SimpleLayer}
这样的问题:
因为这会含糊不清。此语法已存在且具有含义:
var x: { string: SimpleLayer }
这声明了一个变量x
。 x
的类型有一个名为string
的属性,其类型为SimpleLayer
。如果我想使用x
,我会这样做:
x.string = new SimpleLayer;
如果我们使用一个真实的例子,那就更明显了:
var circle: {radius: number}
这声明了一个变量,其中一个属性(radius
)的类型为number
,没有将散列映射radius
类型声明为{{ 1}}类型。