如何在typescript中创建一个带符号索引的接口?

时间:2017-06-30 04:04:02

标签: typescript

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

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

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

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

2 个答案:

答案 0 :(得分:3)

目前看来你不能为自定义符号执行此操作(除非我误读了该线程)。这是一个已知问题,正在跟踪https://github.com/Microsoft/TypeScript/issues/1863

答案 1 :(得分:0)

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

// 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
}