我可以使用索引签名为枚举创建描述数组吗?
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
将确保所有键都是已知的枚举值,并且所有值都已分配。
参考文献:
假设我有以下枚举:
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
将确保所有键都是已知的枚举值,并且所有值都已分配。
参考文献: