网站搜索

javascript - 如何在 Typescript 中遍历以整数为值的枚举?


我有一个枚举

export enums Actions {
All = 1,
Success = 2,
Failed = 3
}

当我使用 for 循环迭代它时,我总共得到 6 个条目。我了解到这就是 Typescript 中的工作方式。但是我如何使用枚举以便可以访问

enum.key 

用于“全部、成功、失败”和

enum.value 

为 1,2,3

答案#1

根据 TypeScript 的文档,如果 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);

答案#2

为了像你在原帖中描述的那样访问枚举 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 所必需的。