【问题标题】:How do I create an interface that takes a symbol index in typescript?如何创建一个在打字稿中采用符号索引的接口?
【发布时间】:2017-10-29 04:16:52
【问题描述】:

我想为一个对象创建一个接口,该接口返回带有字符串索引的子对象,以及带有符号接口的字符串名称。我尝试了以下方法:

const $name = Symbol.for('name')

interface Foo {
  [key: string] : Foo
  [name: $name] : string
}

但是,我收到错误:An index signature must be a string or a number。但是......索引必须是字符串或数字不是真的,至少对于现代 javascript 版本?如何声明我的对象或解决此问题?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    目前您似乎无法对自定义符号执行此操作(除非我误读了线程)。这是一个已知问题,正在跟踪为https://github.com/Microsoft/TypeScript/issues/1863

    【讨论】:

      【解决方案2】:

      如果您要使用少量符号,临时解决方法是将它们添加到 globals.d.ts 文件中的 SymbolConstructor 接口,然后在代码中设置它们:

      // globals.d.ts
      interface SymbolConstructor {
          $name: symbol;
      }
      
      // code.ts
      const $name = Symbol.for('name');
      Symbol.$name = $name;
      
      interface Foo {
        [key: string] : Foo
        [Symbol.$name] : string
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-16
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2014-10-08
        • 1970-01-01
        相关资源
        最近更新 更多