使用枚举来键入接口字段的索引签名吗?

时间:2018-11-27 21:49:32

标签: typescript enums interface typescript2.0

我可以用对象类型表示法来描述索引类型限制:

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];

0 个答案:

没有答案