哈希变量语法在typescript中是如何工作的?
…记录在哪里 我在这里看到过这样的例子:哈希变量语法在typescript中是如何工作的?,typescript,Typescript,…记录在哪里 我在这里看到过这样的例子: class MyThing { private _layers: { [id: string] : SimpleLayer } = {}; ... } …这很有效,这很好,但语法让我感到困惑 什么是“id”?为什么语法不仅仅是废话:{string:SimpleLayer},这是行不通的。我还看到了{[name:string]:Type}和{[index:string]:Type} 我一直在查看typescriptlang.org,试图找到它的实
class MyThing {
private _layers: { [id: string] : SimpleLayer } = {};
...
}
…这很有效,这很好,但语法让我感到困惑
什么是“id”?为什么语法不仅仅是废话:{string:SimpleLayer},这是行不通的。我还看到了{[name:string]:Type}和{[index:string]:Type}
我一直在查看typescriptlang.org,试图找到它的实际记录位置,但我似乎根本找不到它。
请参阅“描述可转位对象”一节。这被称为一个
定义索引的语法为:
[Identifier: KeyType]: ValueType
KeyType
可以是string
或number
您可以声明,实际上并不需要
标识符,因为它在任何地方都不会被使用,但我认为它是必需的,以便强制类/接口设计器指示哈希映射键应该表示什么(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
类型。这很公平,但可以肯定的是,由于技术限制,当前语法中的“标识符”毫无意义,而不是有意义的理由{[TKey]:TValue}
或{{{TKey:TValue}}
或散列
或类似的方法很容易就相当明确了。我多次回到这个答案,因为我总是忘记这个语法。。。但是,当我复制/粘贴您的解决方案时,我对大量错误感到困惑,这让我感到震惊。。我想粘贴的是{[Identifier:KeyType]:ValueType}
@brianc我可以理解这种混淆,但这里我描述了在类型定义中定义索引的语法。除了索引外,类型还可能具有显式命名的属性:{[id:number]:MyType、myProperty:string、myOtherProperty:boolean}
true。。。我恰好在这里登陆,因为typescript散列语法的第一个谷歌结果是这样的。