Der Parameter strictNullChecks bestimmt, ob TypeScript null und undefined als separate Typen betrachtet oder nicht. Wenn der Parameter deaktiviert ist (Standard bis Version 2.0), können Variablen jeden Typs Werte null und undefined ohne Kompilierungsfehler annehmen. Wenn er aktiviert ist (strictNullChecks: true), gelten diese Werte als inkompatibel mit anderen Typen, es sei denn, dies wird ausdrücklich angegeben.
Beispiel:
// strictNullChecks: false let name: string = null; // OK // strictNullChecks: true let title: string = null; // Fehler! let title2: string | null = null; // OK, explizite Typenkombination
Die Aktivierung der strikten Überprüfung hilft, Fehler in den frühen Entwicklungsphasen zu vermeiden, wenn Funktionen/Methoden nicht mit der Möglichkeit rechnen, null oder undefined zu erhalten.
Kann man einer Variablen vom Typ
numberden Wertundefinedzuweisen, wenn strictNullChecks aktiviert ist?
Antwort: Nein, wenn strictNullChecks aktiviert ist, kann einer Variablen vom Typ number kein undefined zugewiesen werden — nur, wenn der Typ ausdrücklich als number | undefined deklariert wird.
Beispiel:
let count: number = undefined; // TS Fehler bei strictNullChecks: true let count2: number | undefined = undefined; // OK
Geschichte
In einem großen node.js-Projekt haben die Entwickler die strikte Überprüfung von null/undefined deaktiviert, um die Migration zu erleichtern. Ein Jahr nach dem Start gab eine der API-Funktionen undefined anstelle eines numerischen Wertes zurück. Der Client-Code war darauf nicht vorbereitet, weshalb die Anwendung auf der Benutzerseite bei einer einfachen Berechnung response.count + 1 katastrophal abstürzte.
Geschichte
In einem E-Commerce-Projekt kam die Produktkollektion als null vom Server, und nicht als []. Die UI-Komponente machte ein Map über diese Produkte und rief bei jedem eine Eigenschaft auf – es trat ein Renderfehler auf. Die Aktivierung von strictNullChecks hob sofort fast 40 ähnliche Stellen hervor.
Geschichte
In einer großen Bibliothek stieg im Laufe der Zeit die Anzahl der „zulässigen“ Werte für einige Props der Component API auf string | null | undefined. Dies führte zu einer Vielzahl von unbehandelten Situationen. Nach der Aktivierung von strictNullChecks konnten nicht offensichtliche Bugs mit Abstürzen der Benutzeroberfläche bei speziellen Konfigurationen erkannt werden.