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

Luc*_*ius 5 typescript

我有以下代码:

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

if (a ^ b) { // this line gives error
  // ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

是因为按位运算符只适用于数字吗?如果直接用JavaScript编写,代码运行完全正常.

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

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

Dre*_*kes 6

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

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

  • 铸件: <number><any>a ^ <number><any>b
  • 否定的平等: a !== b

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

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


ljg*_*jgw 2

从这个意义上说,Typescript 是 javascript 的子集。它编译成 javascript,但你已经知道这一点了。

\n

编译器只是一个遵循命令的计算机程序,涉及“^”运算符的命令是:

\n
\n

4.15.1 *、/、%、\xe2\x80\x93、<<、>>、>>>、&、^ 和 | 运营商

\n

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

\n
\n

(来自规格

\n

我认为您在更新中给出的选项是您关于替代方案的问题的答案。

\n