我有以下代码:
var a: boolean = ...;
var b: boolean = ...;
if (a ^ b) { // this line gives error
// ...
}
但是,TypeScript编译器发出错误:
错误TS2113:算术运算的左侧必须是“any”,“number”或枚举类型。
是因为按位运算符仅适用于数字吗?如果直接用JavaScript编写,代码运行得非常好。
除if (a ? !b : a) { ... }
以外还有其他选择吗?
更新
鉴于它们都是布尔值,我可以使用a !== b
答案 0 :(得分:6)
根据您的建议,根据TypeScript规范,^
运算符和所有其他按位运算符只能应用于数字类型。
我所知道的唯一解决方法是:
<number><any>a ^ <number><any>b
a !== b
我在GitHub上打开了一个跟踪此问题的问题:
答案 1 :(得分:1)
这种意义上的打字稿是javascript的一个子集。它编译成javascript,但你已经知道了。
编译器只是一个遵循命令的计算机程序,有关'^'运算符的命令是:
4.15.1 *,/,%, - ,&lt;&lt;,&gt;&gt;,&gt;&gt;&gt;,&amp;,^和|运营商
这些运算符要求其操作数的类型为Any,Number原始类型或枚举类型。枚举类型的操作数被视为具有基本类型Number。如果一个操作数是null或undefined值,则将其视为具有另一个操作数的类型。结果始终是Number基元类型。
(来自specs)
我认为您在更新中提供的选项是您对替代方案的回答。