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

wlp8pajw  于 2022-11-30  发布在  TypeScript
关注(0)|答案(3)|浏览(96)

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

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

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

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

wrrgggsh

wrrgggsh1#

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

x759pob2

x759pob23#

如果您要使用的符号数量不多,暂时的解决方法是将它们加入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
}

相关问题