如何在Typescript中切换布尔值?

时间:2017-05-15 19:38:16

标签: typescript boolean variable-assignment xor

在Javascript(和许多其他语言)中,我们可以这样做:

arrayOfObjects[i].propertyAlsoArray[j] ^= true;

Typescript不允许使用逻辑^&|运算符。这是a safety feature,所以我必须这样做:

arrayOfObjects[i].propertyAlsoArray[j] = !arrayOfObjects[i].propertyAlsoArray[j];

是否有更短的方法可以避免重复?

3 个答案:

答案 0 :(得分:2)

你也不能在javascript中这样做:

let bool = true;
console.log(bool == true); // true
console.log(bool === true); // true

bool ^= true;
console.log(bool == false); // true
console.log(bool === false); // false

正如您所看到的,"切换"之后的值不是false,而是0 这就是编译器抱怨它的原因,因为您正在将变量的类型从boolean更改为number

如果您不介意这种类型的变化,那么您可以执行以下操作:

function toggle(arr: { propertyAlsoArray: number[] }[], i: number, j: number) {
    arr[i].propertyAlsoArray[j] ^= 1;
}

let arr: { propertyAlsoArray: (boolean | number)[] }[];
toggle(arr as { propertyAlsoArray: number[] }[], 1, 1);

但是你现在使用!=可能是最好的方法。

答案 1 :(得分:1)

我认为没有更短的方法。 你可以这样做

const toggle = (array: Array<bool>, index: number): void => {
  array[index] = !array[index];
}
toggle(arrayOfObjects[i].propertyAlsoArray, j);

这取决于你需要做多少次。

答案 2 :(得分:0)

我知道这个问题很久以前就有人问过了,但它可能对其他人有帮助,在 TypeScript 上切换值的简写是:

let yourVar = false;

  varToggle() {
  this.yourVar = !this.yourVar;    
}