2017-05-15 2 views
1

In Javascript (und vielen anderen Sprachen), können wir dies nur tun:Wie kann ich einen Boolean in Typescript umschalten?

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

Typoskript nicht zulässt logische ^, & und | Betreiber. Dies ist a safety feature, so würde ich es so machen müssen:

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

Gibt es einen kürzeren Weg, der die Wiederholung vermeidet?

Antwort

2

Sie können nicht, dass auch in Javascript tun:

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 

Wie Sie sehen können, ist der Wert nach dem „Toggle“ ist kein false, es ist ein 0 ist.
Deshalb beschwert sich der Compiler darüber, weil Sie den Typ Ihrer Variablen von boolean zu number ändern.

Wenn Sie diese Änderung nicht in Arten dagegen, dann können Sie so etwas wie:

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); 

Aber was haben Sie jetzt mit != ist wahrscheinlich der beste Ansatz.

1

Ich glaube nicht, dass es einen kürzeren Weg gibt. Sie könnten dies tun

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

Es ll hängt davon ab, wie oft Sie brauchen, um dies zu tun.

Verwandte Themen