【问题标题】:How to check does the given string exists as a value in a string enum in Typescript?如何检查给定字符串是否作为值存在于 Typescript 中的字符串枚举中?
【发布时间】:2017-11-01 09:58:56
【问题描述】:

例如

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

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

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

【问题讨论】:

  • @MedetTleukabiluly -- 除非我弄错了,否则这不是 完全 重复的,因为 TypeScript 对数字和字符串枚举有不同的编译逻辑。那里提出的解决方案在这里不起作用,请参阅编译输出。

标签: typescript enums


【解决方案1】:

你的枚举:

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

【讨论】:

    【解决方案2】:

    您的代码:

    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 迭代值)

    【讨论】:

    • 不幸的是 typescript 中没有 Object.values :(
    猜你喜欢
    • 2020-11-29
    • 2017-03-28
    • 1970-01-01
    • 2012-06-03
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多