【问题标题】:Get all values represent decimal value in flag enum获取所有值表示标志枚举中的十进制值
【发布时间】:2021-01-20 21:11:49
【问题描述】:

我正在使用 typescript 来声明类型标志的枚举,如下所示

export enum OperatorEnum{    
    None = 0x0,
    Equal = 0x1,
    NotEqual = 0x2,
    GreaterThan = 0x4,
    LessThan = 0x10,
    GreaterOrEqual = 0x20,
    LessOrEqual = 0x40,
    Contains = 0x80,
    In = 0x100,
}

我收到了一个十进制值,例如 119。 代表 119 的值为 {Equal, NotEqual, GreaterThan, LessThan, GreaterOrEqual, LessOrEqual}

如何使用 | 提取所有值形成枚举。

【问题讨论】:

    标签: typescript enums enum-flags


    【解决方案1】:

    TypeScript 中的枚举是对象,枚举的键和值都是属性值。在您的情况下,您可以将键与值区分开来,因为您的值是数字。

    因此,我们查找数字值,并且与 199 (enumValue & 119) 进行按位与不为 0:

    enum OperatorEnum {
        None = 0x0,
        Equal = 0x1,
        NotEqual = 0x2,
        GreaterThan = 0x4,
        LessThan = 0x10,
        GreaterOrEqual = 0x20,
        LessOrEqual = 0x40,
        Contains = 0x80,
        In = 0x100,
    }
    const value = 0x77; // 119 in decimal
    const matches = Object.values(OperatorEnum)
        .filter(v => typeof v === "number" && (value & v) !== 0)
        .map(v => OperatorEnum[v as number]); // type guaranteed by `filter`
    console.log(matches);
    

    Playground link

    【讨论】:

    • 非常感谢@T.J Crowder,非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2012-10-24
    • 2013-03-10
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多