我有一个二进制字符串,我想转换为等效的标志枚举值。我的尝试:
const permissionNum = parseInt(this.auth.decodedToken.permissions, 2);
const userPermissions: PermissionFlags = PermissionFlags[PermissionFlags[permissionNum]];
字符串
这就是enum:
export enum PermissionFlags {
None = 0,
RemoveMember = 1 << 0,
Invite = 1 << 1,
EditArticleSettings = 1 << 2,
CheckOut = 1 << 3,
CheckIn = 1 << 4,
CanView = 1 << 5,
IsOwner = 1 << 6,
xxx = 1 << 7
}
型
只要它是一个单一的标志,它就可以工作。因此,如果字符串是00111000
,则解析为56,但userPermissions
保持未定义。这在Typescript中是不可能的。
3条答案
按热度按时间wooyq4lh1#
TypeScript中的枚举与C#中的枚举工作方式略有不同。毕竟,它们被编译成一个简单的JavaScript对象,并基于名称和值进行索引。因此,该对象将不包含作为多个标志的组合的索引的有效条目,而仅包含单个标志值的有效条目。
例如,枚举声明将编译为以下JavaScript:
字符串
如果你现在用索引56索引
PermissionFlags
对象,你会得到undefined
,因为没有为那个特定的索引定义值。我宁愿使用下面代码片段中的方法:
型
yjghlzjz2#
字符串
基本上得到枚举的值。apply has flag with“瓦尔& t”expression返回匹配的值。你可能不想返回一个数组,所以你可以这样做:
型
有趣的是,如果你知道你的号码是有效的,你可以直接将它转换为枚举。
c3frrgcw3#
Anon回答很好,但要小心,里面有一个安全问题。线
字符串
不会像它说的那样,实际上它将是
canCheckInOrIsOwner
。如果你希望它是and
而不是or
,你应该替换这行:型
按
型