小编Kla*_*ore的帖子

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

考虑以下枚举:

enum Numbers {
  ONE=1,
  TWO=2
}
Run Code Online (Sandbox Code Playgroud)

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

interface Config {
  [n in Numbers]: string;
}
Run Code Online (Sandbox Code Playgroud)
  • 接口中的计算属性名称必须引用类型为文字类型或“唯一符号”类型的表达式。
  • 计算属性名称必须为“string”、“number”、“symbol”或“any”类型。
  • 找不到名称“n”。

但如果我使用类型别名:

type Config = {
  [n in Numbers]: string;
}
Run Code Online (Sandbox Code Playgroud)

或者将映射类型移到定义的更深处:

interface Config {
  a: {
    [n in Numbers]: string;
  };
}
Run Code Online (Sandbox Code Playgroud)

它编译得很好。

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

PS:在Typescript Playground上使用 v4.2.3。

typescript

11
推荐指数
1
解决办法
1496
查看次数

标签 统计

typescript ×1