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

问题描述 投票:36回答:2

...以及在哪里记录?

我在附近看到了这样的例子:

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

...而且可行,这很好,但是语法令我感到困惑。

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

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

typescript
2个回答
40
投票

TypeScript Walkthrough: Interfaces

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

用于定义索引的语法是:

[Identifier: KeyType]: ValueType

[KeyType可以是stringnumber

您可以声称Identifier并不是真正需要的,因为它没有在任何地方使用,但是我认为这是必需的,以便强制类/接口设计器指示哈希映射键应代表什么(一个id ,名称,电子邮件地址等)。这也提供了让intellisense显示哈希键名称的可能性(就像Visual Studio在其他语言中一样),尽管我认为Typescript intellisense当前不提供此功能。


2
投票

关于您的语法为什么不那么简单的问题,特别是blah:{string:SimpleLayer}之类的东西:

因为这将是模棱两可的。该语法已经存在并且具有以下含义:

var x: { string: SimpleLayer }

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

x.string = new SimpleLayer;

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

var circle: {radius: number}

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

© www.soinside.com 2019 - 2024. All rights reserved.