【发布时间】:2019-04-29 17:27:04
【问题描述】:
我可以用如下的对象类型表示法来描述索引类型限制:
enum Enum {
A = 0,
B = 1,
}
type EnumMap = {
[P in Enum]: string;
}
但是,令人惊讶的是,在接口中使用索引表示法时似乎不可能做到这一点:
enum Enum {
A = 0,
B = 1,
}
interface EnumMap {
[P in Enum]: string;
}
错误是:
计算属性名称的类型必须为“字符串”、“数字”、“符号”或“任意”。
有什么理由会这样吗?根据定义,TypeScript 中的枚举只能有字符串或数字值(甚至两者都有,但不推荐这样做),我认为枚举本身对于它列出的所有值都可以像联合类型一样工作。
进一步调查,我还发现,在以下示例中,EnumValues 的类型为 number,而不是(我期望的)0 | 1。再说一遍,为什么会这样?
const Enum = {
A: 0,
B: 1
};
type EnumKeys = keyof typeof Enum;
type EnumValues = typeof Enum[EnumKeys];
【问题讨论】:
标签: typescript enums interface typescript2.0