考虑以下枚举:
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 ×1