Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 我可以使用索引签名为枚举创建描述数组吗?_Typescript_Enums_Index Signature - Fatal编程技术网

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'