为什么接口不能在打字稿中映射属性?

时间:2021-05-24 21:06:08

标签: typescript

考虑以下枚举:

enum Numbers {
  ONE=1,
  TWO=2
}

以下接口定义会引发编译时错误。

interface Config {
  [n in Numbers]: string;
}
<块引用>
  • 接口中的计算属性名称必须引用类型为文字类型或“唯一符号”类型的表达式。
  • 计算属性名称的类型必须为“字符串”、“数字”、“符号”或“任意”。
  • 找不到名称“n”。

但是如果我使用类型别名:

type Config = {
  [n in Numbers]: string;
}

或者在定义中更深地移动映射类型:

interface Config {
  a: {
    [n in Numbers]: string;
  };
}

它编译得很好。

那么,为什么接口的顶级属性不能是映射类型?

PS:在 typescript playground 上使用 v4.2.3。

1 个答案:

答案 0 :(得分:3)

TypeScript 目前不支持使用接口执行此操作——我不确定是否有任何为什么不支持的原因,除了“它还没有实现”。

幸运的是,这似乎是通过此 PR 的 TS4.4 路线图:https://github.com/microsoft/TypeScript/pull/26797

编辑:如以下评论中所述,上述 PR 并未完全涵盖原始问题中所需的行为。