如何检查给定的字符串是否作为Typescript中字符串枚举中的值存在?

时间:2017-11-01 09:58:57

标签: typescript enums

例如

enum ABC { A = "a", B = "bb", C = "ccc" };

alert("B" in ABC);  // true
alert("bb" in ABC); // false (i wanna true)

请记住,我们讨论字符串枚举功能。

2 个答案:

答案 0 :(得分:3)

您的代码:

enum ABC {
    A = "a",
    B = "bb",
    C = "ccc"
};

编译为以下JavaScript(see demo):

var ABC;
(function (ABC) {
    ABC["A"] = "a";
    ABC["B"] = "bb";
    ABC["C"] = "ccc";
})(ABC || (ABC = {}));

这就是true "A" in ABCfalse获得"bb" in ABC的原因。相反,你需要自己查看(即循环)值;一个短的班轮可能是这样的:

Object.keys(ABC).some(key => ABC[key] === "bb")

(或者如果支持,您可以使用Object.values直接迭代值)

答案 1 :(得分:3)

你的枚举:

enum ABC {
    A = "a",
    B = "bb",
    C = "ccc"
};

编译后(在运行时)变为此:

var ABC = {
    A: "a",
    B: "bb",
    C: "ccc"
};

因此,您需要检查ABC中的任何是否为"bb"。为此,您可以使用Object.values()

Object.values(ABC).some(val => val === "bb"); // true
Object.values(ABC).some(val => val === "foo"); // false