【问题标题】:Typescript flagged enum get values打字稿标记的枚举获取值
【发布时间】:2017-07-27 14:52:10
【问题描述】:

我在下面标记了枚举

enum PermissionEnum {
    SU = 1 << 0,            // 1
    Administrator = 1 << 1, // 2
    User = 1 << 2           // 4
}

对于给定的值 6,我怎样才能得到

字符串[] -> ['管理员', '用户']

数字[] -> [2,4]

【问题讨论】:

    标签: typescript enums


    【解决方案1】:

    您可以将静态函数添加到 enum 命名空间并使用它进行转换。

    您还可以使用技巧从数字中提取设置位,而无需遍历所有未设置的位:n &amp; (~n+1) 为您提供最低设置位。

    enum PermissionEnum  {
        SU = 1 << 0,            // 1
        Administrator = 1 << 1, // 2
        User = 1 << 2           // 4
    }
    namespace PermissionEnum {
      export function toValues(n: PermissionEnum) {
        const values: string[] = [];
        while (n) {
          const bit = n & (~n+1);
          values.push(PermissionEnum[bit]);
          n ^= bit;
        }
        return values;
      }
    }
    console.log(PermissionEnum.toValues(PermissionEnum.Administrator));
    console.log(PermissionEnum.toValues(PermissionEnum.Administrator + PermissionEnum.SU));
    

    输出是:

    [ 'Administrator' ]
    [ 'SU', 'Administrator' ]
    

    转换为数字是相同的,但只是推送 bit 而不进行查找。

    【讨论】:

      【解决方案2】:

      应该可以的:

      let x: PermissionEnum = PermissionEnum.Administrator | PermissionEnum.User;
      
      const permNum: number[] = [];
      const permStr: string[] = [];
      let i = 0;
      let perm: number;
      while (PermissionEnum[perm = 1 << i++]) {
          if (x & perm) {
              permNum.push(perm);
              permStr.push(PermissionEnum[perm]);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-11
        • 2022-08-03
        • 2020-04-30
        • 1970-01-01
        • 2020-06-23
        • 2019-09-26
        • 1970-01-01
        • 2021-07-08
        相关资源
        最近更新 更多