哈希变量语法如何在打字稿中起作用?

时间:2014-01-12 02:01:16

标签: typescript

......它在哪里记录?

我在这个地方看过这样的例子:

class MyThing {
  private _layers: { [id: string] : SimpleLayer } = {};
  ...
}

......这很有用,这很棒,但语法让我感到困惑。

什么是'id'?为什么语法不仅仅是等等:{string:SimpleLayer},不起作用。我还看到{[name:string]:Type}和{[index:string]:Type}。

我一直在寻找typescriptlang.org试图找到实际记录的位置,但我似乎根本找不到它。

2 个答案:

答案 0 :(得分:35)

http://blogs.msdn.com/b/typescript/archive/2013/01/24/interfaces-walkthrough.aspx

请参阅“描述可索引对象”部分。这称为index signature

语法为:

[Identifier: KeyType]: ValueType

KeyType可以是stringnumber

您可以声称Identifier并不是真的需要,因为它不会在任何地方使用,但我认为这是强制类/接口设计器指示哈希映射键应该表示什么所必需的(身份证,姓名,电子邮件地址等)。这也提供了intellisense显示散列键名称的可能性(正如Visual Studio对其他语言所做的那样),尽管我不认为Typescript intellisense当前提供了这个。

答案 1 :(得分:2)

关于为什么语法不简单的问题,特别是像blah:{string:SimpleLayer}这样的问题:

因为这会含糊不清。此语法已存在且具有含义:

var x: { string: SimpleLayer }

这声明了一个变量xx的类型有一个名为string的属性,其类型为SimpleLayer。如果我想使用x,我会这样做:

x.string = new SimpleLayer;

如果我们使用一个真实的例子,那就更明显了:

var circle: {radius: number}

这声明了一个变量,其中一个属性(radius)的类型为number没有将散列映射radius类型声明为{{ 1}}类型。