如何在 Typescript 中切换布尔值?

How do I toggle a boolean in Typescript?

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

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

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

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

有没有更短的方法避免重复?

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

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

这取决于你需要执行多少次。

你也不能在 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

如您所见,"toggle" 之后的值不是 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);

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

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

let yourVar = false;

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