【问题标题】:How does the hash variable syntax work in typescript?哈希变量语法在打字稿中如何工作?
【发布时间】:2014-01-12 02:01:15
【问题描述】:

...它记录在哪里?

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

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

...这很好用,但语法让我很困惑。

什么是'id'?为什么语法不只是 blah:{string:SimpleLayer},不起作用。我也见过 {[name: string]:Type} 和 {[index:string]:Type}。

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    TypeScript Walkthrough: Interfaces

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

    定义索引的语法是:

    [Identifier: KeyType]: ValueType
    

    KeyType 可以是stringnumber

    您可以声称 Identifier 并不是真正需要的,因为它不会在任何地方使用,但我认为它是必需的,以便强制类/接口设计器指示哈希映射键应表示的内容( id、姓名、电子邮件地址等)。这也提供了让智能感知显示哈希键名称的可能性(就像 Visual Studio 对其他语言所做的那样),尽管我认为 Typescript 智能感知目前不提供这个。

    【讨论】:

    • 我已经多次回到这个答案,因为我总是忘记这个语法......但我很震惊,当我复制/粘贴你的解决方案时,我对这个问题感到困惑错误..我想要粘贴的是{ [Identifier: KeyType]: ValueType }
    • @brianc 我可以理解这种混淆,但这里我描述的是在类型定义中定义索引的语法within。除了索引之外,类型还可能具有显式命名的属性:{ [id: number]: MyType, myProperty: string, myOtherProperty: boolean }
    • 真的...我碰巧来到这里,因为typescript hash syntax 的第一个谷歌结果就是这个。
    【解决方案2】:

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

    因为这将是模棱两可的。这个语法已经存在并且有意义:

    var x: { string: SimpleLayer }
    

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

    x.string = new SimpleLayer;
    

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

    var circle: {radius: number}
    

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

    【讨论】:

    • 很公平,但可以肯定的是,当前语法中的“标识符”是没有意义的,并且由于技术限制而不是有意义的原因。 {[TKey]:TValue}{{TKey:TValue}}Hash<TKey,TValue> 或一些类似的东西可以很容易地等效明确。
    猜你喜欢
    • 1970-01-01
    • 2022-07-20
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2011-02-07
    相关资源
    最近更新 更多