假设我有以下枚举:
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