ProgrammazioneSviluppatore Frontend

Как funziona il parametro di controllo rigoroso di null e undefined — strictNullChecks in TypeScript? Come l'attivazione influisce sulla programmazione quotidiana?

Supera i colloqui con l'assistente IA Hintsage

Risposta

Il parametro strictNullChecks determina se TypeScript considera null e undefined come tipi separati o meno. Se il parametro è disattivato (per impostazione predefinita fino alla versione 2.0), le variabili di qualsiasi tipo possono assumere i valori null e undefined senza errori di compilazione. Se è attivato (strictNullChecks: true), questi valori sono considerati incompatibili con altri tipi, tranne nei casi in cui ciò è esplicitamente indicato.

Esempio:

// strictNullChecks: false let name: string = null; // OK // strictNullChecks: true let title: string = null; // Errore! let title2: string | null = null; // OK, unione di tipo esplicita

L'attivazione del controllo rigoroso aiuta a evitare errori nelle prime fasi di sviluppo, quando funzioni/metodi non si aspettano di ricevere null o undefined.

Domanda trabocchetto

È possibile assegnare a una variabile di tipo number il valore undefined quando strictNullChecks è attivato?

Risposta: No, se strictNullChecks è attivato, a una variabile di tipo number non può essere assegnato undefined — solo se il tipo è esplicitamente dichiarato come number | undefined.

Esempio:

let count: number = undefined; // Errore TS quando strictNullChecks è true let count2: number | undefined = undefined; // OK

Esempi di errori reali a causa della mancanza di conoscenza delle sottigliezze dell'argomento.


Storia

In un grande progetto node.js, gli sviluppatori hanno disattivato il controllo rigoroso di null/undefined per "semplificare la migrazione". Di conseguenza, un anno dopo il lancio, una delle funzioni API restituì undefined invece di un valore numerico. Il codice client non era pronto per questo, causando un crash fatale dell'applicazione sul lato utente durante un semplice calcolo response.count + 1.


Storia

In un progetto e-commerce, la collezione di prodotti è arrivata dal server come null, e non come []. Il componente UI faceva un map su questi prodotti, causando un errore di rendering. L'attivazione di strictNullChecks ha subito evidenziato quasi 40 casi simili.


Storia

In una grande libreria, nel tempo il numero di valori "consentiti" per alcune proprietà dell'API dei componenti è diventato string | null | undefined. Questo ha portato a una marea di situazioni non gestite. Dopo aver attivato strictNullChecks, è stato possibile catturare bug non ovvi con crash dell'interfaccia in configurazioni specifiche.