简体   繁体   English

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

[英]How to check does the given string exists as a value in a string enum in Typescript?

For example例如

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

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

Please, keep in mind that we discuss about string enum features.请记住,我们讨论的是字符串枚举功能。

Your code: 你的代码:

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

is compiled to the following JavaScript ( see demo ): 编译为以下JavaScript( 请参阅演示 ):

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

This is why you are getting true for "A" in ABC , and false for "bb" in ABC . 这就是为什么"A" in ABCtrue "A" in ABC中的"bb" in ABCfalse Instead, you need to look (ie loop) for values yourself; 相反,你需要自己寻找(即循环)值; a short one liner could be this: 一个短的班轮可能是这样的:

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

(or you could iterate over values directly using Object.values if supported) (或者,如果支持,您可以使用Object.values直接迭代值)

Your enum: 你的枚举:

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

Becomes this after compilation (at runtime): 在编译之后(在运行时)变成这样:

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

Therefore you need to check if any of the values in ABC is "bb" . 因此,您需要检查ABC任何是否为"bb" To do this, you can use Object.values() : 为此,您可以使用Object.values()

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

In ECMAScript 2016 or higher you can also use includes() for this purpose.在 ECMAScript 2016 或更高版本中,您还可以为此目的使用includes()

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

See also: This SO answer另请参阅:这个 SO 答案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM