首页 > 解决方案 > 我可以使用索引签名为枚举创建一组描述吗?

问题描述

假设我有以下枚举:

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

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

我试过这个:

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

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

归根结底,我希望能够ApiRoleDescriptions[ApiRole.User]直接在我的代码中的其他地方编写类似的东西。

编辑:在撰写本文时,我的问题的答案似乎是否定的 - 至少在此 PR合并到 typescript 之前,它目前具有 3.3/3.4 的里程碑。但是,与此同时,我仍在寻找某种方法来完成此任务。

标签: typescriptenumsindex-signature

解决方案


你可以这样声明:

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

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

参考:


推荐阅读