Varför tillåter TypeScript att kontrollera mot undefined?


I följande exempel är variabeln boolOrNull aldrig odefinierad och villkoret alltid sant, varför klagar inte TypeScript?

let boolOrNull: boolean | null = null;
if (boolOrNull !== undefined) {
    console.log(123);
}

Svar #1

Citerar Ryan Cavanaugh från detta GitHub-ärende:

Vi tillåter detta medvetet för att stödja defensiv programmering (d.v.s. för att skydda mot saknade indata från icke-TS-kod). Om efterfrågan är tillräcklig kan vi lägga till en flagga eller något liknande.

Det vill säga, om din Typescript-kod någonsin måste interagera med icke-Typescript-kod, kan du vilja kontrollera att den icke-Typescript-koden inte tillhandahåller ett undefined- eller null-värde där det inte är meningen.

Självklart, med flaggan strictNullChecks aktiverad tillåter inte Typescript-kod att undefined förekommer här, såvida man inte använder annan osäker kod som att komma åt en saknad egenskap på en typ med en indexsignatur. En av Typescripts designprinciper är dock att det ska kunna hantera idiomatisk Javascript-kod, och det är ganska vanligt för Javascript-programmerare att jämföra värden med undefined eller null även när dessa värden egentligen aldrig ska vara undefined eller null.

Som citatet ovan antyder, om en kompilatorflagg som aktiverar strängare kontroller som detta skulle vara användbar för dig, kan du svara på den länkade GitHub-frågan för att ge din feedback om det.