如何获取字符串枚举中的所有值?

时间:2018-03-21 21:37:43

标签: typescript

我有一个字符串枚举,需要获取所有值。例如,对于以下枚举,我想返回["Red", "Yellow"]

export enum FruitColors {
    Apple = "Red",
    Banana = "Yellow",
}

4 个答案:

答案 0 :(得分:3)

您正在寻找Object.values()

答案 1 :(得分:1)

根据this GitHub comment,可以通过以下方式实现:

Object.keys(FruitColors).map(c => FruitColors[c]);

答案 2 :(得分:0)

您可以检查FruitColors对象。请注意,如果您没有为枚举值指定名称,则生成的代码将不同,并且基于键/值的简单映射将导致错误的结果。 e.g。

export enum FruitColors {
    "Red",
    "Yellow",
}

Object.values(FruitColors); // ["Red", "Yellow", 0, 1]

因为生成的代码是这样的:

var FruitColors;
(function (FruitColors) {
    FruitColors[FruitColors["Red"] = 0] = "Red";
    FruitColors[FruitColors["Yellow"] = 1] = "Yellow";
})(FruitColors = exports.FruitColors || (exports.FruitColors = {}));

然后,您可以按typeof value == "string"过滤结果。

答案 3 :(得分:0)

也许你可以试试这个函数,它可以返回字符串+数字枚举类型的所有值,而不仅仅是字符串枚举

const getAllValuesEnum = (enumType: any) => {
  const keysAndValues = Object.values(enumType);
  const values = [];

      keysAndValues.forEach((keyOrValue: any) => {
        if (isNaN(Number(keyOrValue))) {
          values.push(enumType[keyOrValue] || keyOrValue);
        }
      });

      return values;
    };

示例:

enum MyEnum {
  A = "a",
  B = 7,
  C = "c",
  D = 1,
}

它会返回 [ 1, 7, 'a', 'c' ]