2016-03-06 93 views
1

用下面的代码:为什么在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但还是可以找不到它的根本原因。

有人可以澄清吗?

+1

'&'是按位“和”运算符,因此您将其应用于整数而不是布尔值。 –

+0

有道理 - 谢谢。发表一个答案,我会结束这个问题 – cloakedninjas

回答

0

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

在打字稿,你可以想见,创建一个&&=操作,但&&操作员使用短路评价,其中评价就停止结果众所周知,这意味着语义的x &&= y变得有点糊涂了。

+0

鉴于Typescript – cloakedninjas

+0

的强类型性质,这是有道理的。 C#也是一种强类型语言 - 在某些领域,实际上_much_更强类型化 - 但C#具有一元逻辑运算符。根据我对这个问题的自己的介绍,以及我对这门语言的体验,我认为真正的问题是TypeScript实际上不是强类型的,这使得一元布尔运算符难以实现。你必须写一种新的语言 - 例如Dart - 彻底摆脱JavaScript遗产以获得某些语言功能。 –

相关问题