我有以下代码:
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
正如您所建议的那样,^根据TypeScript规范,运算符和所有其他按位运算符只能应用于数字类型.
我所知道的唯一解决方法是:
<number><any>a ^ <number><any>ba !== b我在GitHub上打开了一个跟踪它的问题:
https://github.com/Microsoft/TypeScript/issues/587
从这个意义上说,Typescript 是 javascript 的子集。它编译成 javascript,但你已经知道这一点了。
\n编译器只是一个遵循命令的计算机程序,涉及“^”运算符的命令是:
\n\n\n4.15.1 *、/、%、\xe2\x80\x93、<<、>>、>>>、&、^ 和 | 运营商
\n这些运算符要求其操作数为 Any 类型、Number 基元类型或枚举类型。枚举类型的操作数被视为具有基本类型 Number。如果一个操作数为 null 或未定义值,则将其视为具有另一操作数的类型。结果始终是 Number 基元类型。
\n
(来自规格)
\n我认为您在更新中给出的选项是您关于替代方案的问题的答案。
\n| 归档时间: |
|
| 查看次数: |
3874 次 |
| 最近记录: |