[英]TypeScript union in enums
我在TypeScript中遇到了一个似乎无法解决的问题。
这是代码
enum test{
PowerAttack = 2,
MagicAttack = 5,
Attack = PowerAttack && MagicAttack //invalid
}
document.body.innerHTML = (test.PowerAttack == test.Attack).toString(); //check1
document.body.innerHTML += (test.MagicAttack == test.Attack).toString();//check2
如何使这两项检查有效?
我正在尝试使test.Attack等于test.PowerAttack和test.MagicAttack,但是我无法使其工作。 枚举可以做到吗? 请注意,我在枚举中还会有很多其他条目,所以我真的不想弄乱按位运算符,因为它很快就会变得难以理解和难以维护。
如果无法使其与枚举一起使用,则采用的最佳逻辑是什么? 类和子类? 类型? 其他?
我想你要
enum test{
PowerAttack = 2,
MagicAttack = 5,
Attack = PowerAttack | MagicAttack
}
我们将test.Attack
定义为按位或其他两个值,即7。
现在test.PowerAttack
和test.MagicAttack
可以为“会员”进行测试test.Attack
说test.PowerAttack & test.Attack
。 如果您想要基于位的枚举,则无法避免使用&
来测试包含性-这就是您必须这样做的方式。
document.body.innerHTML = (test.PowerAttack & test.Attack).toString(); //check1
document.body.innerHTML += (test.MagicAttack & test.Attack).toString();//check2
似乎您想将枚举值用作标志。 最简单的方法是使用一位二进制数。 例如
enum Test {
PowerAttack = 1 << 0,
MagicAttack = 1 << 1,
Attack = PowerAttack | MagicAttack
}
然后您可以测试为:
var test: Test // you get this from somewhere
if (test & Test.Attack) {
console.log('has attack');
}
在这里介绍: https : //basarat.gitbooks.io/typescript/content/docs/enums.html#enums-as-flags
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.