繁体   English   中英

枚举中的TypeScript联合

[英]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.PowerAttacktest.MagicAttack可以为“会员”进行测试test.Attacktest.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM