Typescript 我可以使用索引签名为枚举创建描述数组吗?
假设我有以下枚举:Typescript 我可以使用索引签名为枚举创建描述数组吗?,typescript,enums,index-signature,Typescript,Enums,Index Signature,假设我有以下枚举: export enum ApiRole { User = 1, SuperUser = 2, Restricted = 3, } 有没有一种方法可以让我轻松创建一个数组,我可以使用这些枚举值来索引该数组,该数组将返回一个可以用作描述的字符串值 我试过这个: export const ApiRoleDescriptions: {[role: number]: string} = { 1: 'Normal User', 2: 'Super
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]的东西
编辑:在撰写本文时,我的问题的答案似乎是否定的——至少在被合并到typescript之前是这样,typescript目前的里程碑是3.3/3.4。然而,我仍在寻找某种方法来实现这一点。您可以这样声明:
export const ApiRoleDescriptions: {[k in ApiRole]: string} = {
1: 'Normal User',
2: 'Super User',
[ApiRole.Restricted]: 'Restricted',
}
ApiRole中的将确保所有键都具有已知的枚举值,并且所有值都已分配
参考资料:
“此方法要求我手动设置每个枚举值的数值”-如果不是手动,TS如何知道ApiRole.User
是普通用户
?我希望能够在索引器的定义中使用枚举值及其名称。所以类似于export const apiroledescription:{[role:apiroe]:string}={apiroe.User:'Normal User',}
等。基本上,我只是觉得索引签名需要字符串
或数字
值,枚举可以是字符串
或数字
值,这很奇怪,但是它仍然不能在索引签名中使用。const ApiRoleDescriptions:{[k in ApiRole]:string}={
这几乎就是我想要的,因为它从ApiRole
中提取值,但它仍然需要我以'1':'Normal User'
格式定义它们,而不是ApiRole.User:'Normal User'