哈希变量语法如何在打字稿中工作



...它在哪里记录?

我到处都看到过这样的例子:

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 }

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

x.string = new SimpleLayer;

如果我们使用真实的例子会更明显:

var circle: {radius: number}

这声明了一个带有一个属性(radius)的变量,它是number类型,它没有声明radius类型到number类型的哈希映射。

最新更新