我可以使用索引签名为枚举创建描述数组吗?

Can I use an index signature to create an array of descriptions for an enum?

假设我有以下枚举:

export enum ApiRole {
    User = 1,
    SuperUser = 2,
    Restricted = 3,
}

有没有一种方法可以让我轻松创建一个数组,我可以使用这些枚举值来索引,这将 return 一个我可以用作描述的字符串值?

我试过这个:

export const ApiRoleDescriptions: {[role: number]: string} = {
    1: 'Normal User',
    2: 'Super User',
    3: 'Restricted',
}

但这种方法需要我手动设置每个枚举值的数值,这有点维护性问题。

在一天结束时,我希望能够直接在我的代码中的其他地方编写类似 ApiRoleDescriptions[ApiRole.User] 的内容。

编辑:在撰写本文时,我的问题的答案似乎是否定的——至少在 this PR 被合并到打字稿之前是这样,打字稿目前的里程碑是 3.3/3.4。但是,在此期间我仍在寻找某种方法来完成此操作。

你可以这样声明:

export const ApiRoleDescriptions: {[k in ApiRole]: string} = {
    1: 'Normal User',
    2: 'Super User',
    [ApiRole.Restricted]: 'Restricted',
}

in ApiRole 将确保所有键都是已知的枚举值,并且所有值都已分配。

参考文献: