Typescript标记的枚举获取值

时间:2017-07-27 14:52:11

标签: typescript enums

我在

下面标记了枚举
enum PermissionEnum {
    SU = 1 << 0,            // 1
    Administrator = 1 << 1, // 2
    User = 1 << 2           // 4
}

对于给定值6,我该如何获得

string [] - &gt; [&#39;管理员&#39;,&#39;用户&#39;]

数字[] - &gt; [2,4]

2 个答案:

答案 0 :(得分: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]);
    }
}

答案 1 :(得分:1)

您可以在enum命名空间中添加静态函数,并使用它来进行转换。

此外,您可以使用技巧从数字中提取设置位,而不必迭代所有未设置的位:n & (~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