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

Relaterade artiklar