我可以使用索引签名为枚举创建一系列描述



假设我有以下枚举:

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合并到Typecript之前,当前的里程碑为3.3/3.4。但是,我仍在寻找某种方法来完成此操作。

您会这样声明:

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

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

参考:

  • https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types
  • https://developer.mozilla.org/en-us/docs/web/javascript/Referent/Referent/Poperators/Object_Initializer#competed_property_names

最新更新