Varför är logiska tilldelningsoperatorer (&=) förbjudna i Typescript?
Med följande kod:
var x:boolean = true;
x &= false;
Resultat i error TS2447: Operatorn '&=' är inte tillåten för booleska typer. Överväg att använda '&&' istället.
Jag har letat runt men kan inte hitta någon anledning till varför, det finns en PR för att göra felet som det är: https://github.com/Microsoft/TypeScript/issues/712 men kan fortfarande inte hitta den underliggande orsaken till det.
Kan någon förklara?
Svar #1
Jag kan inte tala för TypeScripts designers men & (bitvis OCH) operatorn är avsedd att utföra en bitvis OCH-operation på två heltal. Din variabel är en boolean och dessa värden kombineras med && (logiskt OCH).
I TypeScript skulle du tänkbart kunna skapa en &&=-operator, men &&-operatorn använder kortslutningsutvärdering där utvärderingen stoppas så snart resultatet är känt, vilket innebär att semantiken för x &&= y blir lite oklar.
Svar #2
Typescript 4.0+ stöder nu logisk tilldelning. Här är onlineexemplet.
type Bool = boolean | null | undefined;
let x: Bool = true;
x &&= false; // => false
x &&= null; // => null
x &&= undefined; // => undefined
let y: Bool = false;
y &&= true; // => false
y &&= null; // => false
y &&= undefined; // => false
Vilket är motsvarande
type Bool = boolean | null | undefined;
let x: Bool = true;
x && x = false; // => false
x && x = null; // => null
x && x = undefined; // => undefined
let y: Bool = false;
y && y = true; // => false
y && y = null; // => false
y && y = undefined; // => false
