我可以用对象类型表示法来描述索引类型限制:
enum Enum {
A = 0,
B = 1,
}
type EnumMap = {
[P in Enum]: string;
}
但是,令人惊讶的是,在接口中使用索引符号时似乎不可能做到这一点:
enum Enum {
A = 0,
B = 1,
}
interface EnumMap {
[P in Enum]: string;
}
错误是:
计算出的属性名称必须为'string','number','symbol'或'any'类型。
有什么理由吗?根据定义,TypeScript中的枚举只能具有字符串或数字值(或什至两者都可以,但是不建议这样做),我认为枚举本身对于列出的所有值都将像联合类型一样工作。
进一步研究一下,我还发现,在下面的示例中,EnumValues
的类型为number
,而不是{我希望是)0 | 1
。再次,为什么会这样?
const Enum = {
A: 0,
B: 1
};
type EnumKeys = keyof typeof Enum;
type EnumValues = typeof Enum[EnumKeys];