Parametr strictNullChecks określa, czy TypeScript traktuje null i undefined jako oddzielne typy, czy nie. Jeśli parametr jest wyłączony (domyślnie do wersji 2.0), zmienne dowolnego typu mogą przyjmować wartości null i undefined bez błędów kompilacji. Jeśli jest włączony (strictNullChecks: true), te wartości są uznawane za niekompatybilne z innymi typami, chyba że jest to wyraźnie określone.
Przykład:
// strictNullChecks: false let name: string = null; // OK // strictNullChecks: true let title: string = null; // Błąd! let title2: string | null = null; // OK, jawne połączenie typów
Włączenie ścisłej kontroli pomaga unikać błędów na wczesnym etapie rozwoju, kiedy funkcje/metody nie przewidują możliwości uzyskania null lub undefined.
Czy można przypisać zmiennej typu
numberwartośćundefinedprzy włączonym strictNullChecks?
Odpowiedź: Nie, jeśli jest włączony strictNullChecks, to zmiennej typu number nie można przypisać undefined — tylko jeśli wyraźnie zadeklarować typ jako number | undefined.
Przykład:
let count: number = undefined; // Błąd TS przy strictNullChecks: true let count2: number | undefined = undefined; // OK
Historia
W jednym dużym projekcie node.js deweloperzy wyłączyli ścisłą kontrolę null/undefined dla „ułatwienia migracji”. W efekcie rok po uruchomieniu jedna z funkcji API zwróciła undefined zamiast wartości liczbowej. Kod kliencki nie był na to gotowy, przez co aplikacja po stronie użytkownika fatalnie się wieszała przy prostym obliczeniu response.count + 1.
Historia
W projekcie ecommerce kolekcja produktów przyszła z serwera jako null, a nie []. Komponent UI próbował zrobić mapę po tych produktach, wywołując dla każdego właściwość — pojawiała się błędna renderowanie. Włączenie strictNullChecks od razu ujawniło prawie 40 podobnych miejsc.
Historia
W dużej bibliotece z czasem liczba „dopuszczalnych” wartości dla niektórych propsów API komponentu stała się string | null | undefined. Doprowadziło to do masy nieobsługiwanych sytuacji. Po włączeniu strictNullChecks udało się wychwycić nieoczywiste błędy z zawieszaniem się interfejsu przy specyficznych konfiguracjach.