为什么在Typescript中不允许使用逻辑赋值(& =)运算符?

时间:2016-03-06 13:17:08

标签: typescript

使用以下代码:

var x:boolean = true;

x &= false;

error TS2447: The '&=' operator is not allowed for boolean types. Consider using '&&' instead.

中的结果

我环顾四周但却找不到原因,有一个PR可以使错误发生错误:https://github.com/Microsoft/TypeScript/issues/712但是仍然无法找到它的根本原因。

有人可以澄清吗?

2 个答案:

答案 0 :(得分:3)

我无法代表TypeScript的设计人员发言,但& (bitwise AND)运算符旨在对两个整数执行按位AND运算。您的变量是布尔值,这些值使用&& (logical AND)组合。

在TypeScript中,您可以设想创建&&=运算符,但&&运算符使用短路评估,其中评估在结果已知时停止,这意味着x &&= y的语义变为有点阴云密布。

答案 1 :(得分:0)

Typescript 4.0+现在支持逻辑分配。这是在线example

type Bool = boolean | null | undefined;

let x: Bool = true;

x &&= false; // => false
x &&= null; // => null
x &&= undefined; // => undefined

let y: Bool = false;

y &&= true; // => false
y &&= null; // => false
y &&= undefined; // => false

等同于

type Bool = boolean | null | undefined;

let x: Bool = true;

x && x = false; // => false
x && x = null; // => null
x && x = undefined; // => undefined

let y: Bool = false;

y && y = true; // => false
y && y = null; // => false
y && y = undefined; // => false