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



例如

enum ABC { A = "a", B = "bb", C = "ccc" };
alert("B" in ABC);  // true
alert("bb" in ABC); // false (i wanna true)

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

你的枚举:

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

您的代码:

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

编译为以下 JavaScript(参见演示):

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

这就是为什么你"A" in ABC得到true"bb" in ABC false。相反,您需要自己寻找(即循环)值;一个短的衬里可能是这样的:

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

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

在 ECMAScript 2016 或更高版本中,您也可以使用 includes() 来实现此目的。

Object.values(ABC).includes('bb' as ABC);

另请参阅: 这个 SO 答案

最新更新