TypeScript布尔值XOR - 错误TS2113:算术运算的左/右侧必须是“any”,“number”或枚举类型

时间:2014-01-17 07:48:49

标签: typescript

我有以下代码:

var a: boolean = ...;
var b: boolean = ...;

if (a ^ b) { // this line gives error
  // ...
}

但是,TypeScript编译器发出错误:

  

错误TS2113:算术运算的左侧必须是“any”,“number”或枚举类型。

是因为按位运算符仅适用于数字吗?如果直接用JavaScript编写,代码运行得非常好。

if (a ? !b : a) { ... }以外还有其他选择吗?

更新 鉴于它们都是布尔值,我可以使用a !== b

2 个答案:

答案 0 :(得分:6)

根据您的建议,根据TypeScript规范,^运算符和所有其他按位运算符只能应用于数字类型。

我所知道的唯一解决方法是:

  • 施法:<number><any>a ^ <number><any>b
  • 否定平等:a !== b

我在GitHub上打开了一个跟踪此问题的问题:

https://github.com/Microsoft/TypeScript/issues/587

答案 1 :(得分:1)

这种意义上的打字稿是javascript的一个子集。它编译成javascript,但你已经知道了。

编译器只是一个遵循命令的计算机程序,有关'^'运算符的命令是:

  

4.15.1 *,/,%, - ,&lt;&lt;,&gt;&gt;,&gt;&gt;&gt;,&amp;,^和|运营商

     

这些运算符要求其操作数的类型为Any,Number原始类型或枚举类型。枚举类型的操作数被视为具有基本类型Number。如果一个操作数是null或undefined值,则将其视为具有另一个操作数的类型。结果始终是Number基元类型。

(来自specs

我认为您在更新中提供的选项是您对替代方案的回答。