我有一个枚举
export enums Actions { All = 1, Success = 2, Failed = 3 }
当我使用for循环遍历它时,我得到了总共6个条目。我知道这就是它在Typescript中的工作方式。但是我如何使用枚举以便我可以访问
enum.key
代表“所有、成功、失败”和
enum.value
1、2、3
cmssoen21#
根据typescript的文档,如果as const关键字足够,那么我们不需要使用枚举。只是解释,在这种情况下,可能可以使用如图所示的实现,使用Object.keys(obj)和Object.values(obj)来获得所需的输出
as const
Object.keys(obj)
Object.values(obj)
const Actions = { All: 0, Success: 1, Failure: 2 } as const let keyArr = Object.keys(Actions); let valArr = Object.values(Actions);
gev0vcfq2#
为了访问枚举keys和values,你可以像OP中描述的那样,将枚举 * 转换 * 为具有属性keys和values以及相应数据的基本对象。
keys
values
export enum Actions { All = 1, Success = 2, Failed = 3 } export type ConvertedActions = { keys: string[]; values: Actions[]; }; const result = Object.values(Actions).reduce( (acc, curr): ConvertedActions => isNaN(+curr) ? {...acc, keys: [...acc.keys, curr as string]} : {...acc, values: [...acc.values, curr as Actions]}, <ConvertedActions>{keys: [], values: []} ); console.log(result.keys); // [ 'All', 'Success', 'Failed' ] console.log(result.values); // [ 1, 2, 3 ]
注意:不要被我定义的额外类型(ConvertedActions)搞糊涂了,但是,为了避免大量使用any,它是必需的。
ConvertedActions
any
bqf10yzr3#
const keys = Object.keys(Actions); const values = Object.values(Actions);
ttcibm8c4#
在这种特定情况下,您可以将All, Success, Falied和1, 2, 3分隔为两个不同的数组。
All, Success, Falied
1, 2, 3
export enums Actions { All = 1, Success = 2, Failed = 3 } console.log(Object.keys(enums).filter((v) => isNaN(Number(v)))); // ["All", "Success", "Failed"] console.log(Object.keys(enums).filter((v) => !isNaN(Number(v)))); // ["1", "2", "3"]
你也可以用for..in循环来实现:
for..in
for (const value in enums) { console.log(value); // 1, 2, 3, All, Success, Falied console.log(value.filter((v) => isNaN(Number(v)))); // All, Success, Falied console.log(value.filter((v) => !isNaN(Number(v)))); // 1, 2, 3 }
有更多的方法可以使用forEach,for..of等,但从你的问题,我认为我的例子应该做的伎俩。
forEach
for..of
lnlaulya5#
这是我的想法,我认为这是最直观的
for (const keyString in Actions) { const key = Number(keyString); if (isNaN(key)) { continue; } console.log(key); }
5条答案
按热度按时间cmssoen21#
根据typescript的文档,如果
as const
关键字足够,那么我们不需要使用枚举。只是解释,在这种情况下,可能可以使用如图所示的实现,使用
Object.keys(obj)
和Object.values(obj)
来获得所需的输出gev0vcfq2#
为了访问枚举
keys
和values
,你可以像OP中描述的那样,将枚举 * 转换 * 为具有属性keys
和values
以及相应数据的基本对象。注意:不要被我定义的额外类型(
ConvertedActions
)搞糊涂了,但是,为了避免大量使用any
,它是必需的。bqf10yzr3#
ttcibm8c4#
在这种特定情况下,您可以将
All, Success, Falied
和1, 2, 3
分隔为两个不同的数组。你也可以用
for..in
循环来实现:有更多的方法可以使用
forEach
,for..of
等,但从你的问题,我认为我的例子应该做的伎俩。lnlaulya5#
这是我的想法,我认为这是最直观的