2017-05-15 122 views
1

在Javascript中(以及許多其他語言),我們就可以做到這一點:如何在Typescript中切換布爾值?

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

打字稿不允許邏輯^&|運營商。這是a safety feature,所以我不得不做這樣的:

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

是否有避免重複較短的方法嗎?

回答

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

我不認爲有一個簡短的方法。 你能做到這一點

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

這-111取決於你需要多少次做到這一點。