在Javascript(和许多其他语言)中,我们可以这样做:
arrayOfObjects[i].propertyAlsoArray[j] ^= true;
Typescript不允许使用逻辑^
,&
和|
运算符。这是a safety feature,所以我必须这样做:
arrayOfObjects[i].propertyAlsoArray[j] = !arrayOfObjects[i].propertyAlsoArray[j];
是否有更短的方法可以避免重复?
答案 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;
}