De ce permite TypeScript verificarea împotriva valorii undefined?


În exemplul următor, variabila boolOrNull nu este niciodată nedefinită și condiția este întotdeauna adevărată, de ce nu se plânge TypeScript?

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

Răspuns #1

Citat de Ryan Cavanaugh din această problemă de pe GitHub:

Permitem intenționat acest lucru de dragul programării defensive (adică pentru a ne apăra împotriva intrărilor lipsă din codul non-TS). Dacă există suficientă cerere, am putea adăuga un flag sau ceva asemănător.

Adică, dacă codul tău Typescript trebuie vreodată să interacționeze cu cod care nu este Typescript, s-ar putea să vrei să verifici că acel cod care nu este Typescript nu oferă o valoare undefined sau null acolo unde nu ar trebui.

Desigur, cu opțiunea strictNullChecks activată, codul TypeScript nu va permite apariția lui undefined aici, decât dacă se folosește alt cod nesigur, cum ar fi accesarea unei proprietăți lipsă pe un tip cu o semnătură de index. Totuși, unul dintre principiile de proiectare ale TypeScript este că ar trebui să acomodeze codul idiomatic JavaScript, și este destul de normal pentru programatorii JavaScript să compare valori cu undefined sau null, chiar și atunci când aceste valori nu ar trebui să fie niciodată undefined sau null.

Așa cum sugerează citația de mai sus, dacă un flag al compilatorului care activează verificări mai stricte ca acesta ți-ar fi util, ai putea răspunde la problema legată de GitHub pentru a-ți oferi feedback-ul despre aceasta.