programowanieFrontend Developer

Jak działa parametr ścisłej kontroli null i undefined — strictNullChecks w TypeScript? Jak jego włączenie wpływa na codzienne programowanie?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź

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.

Pytanie z podstępem

Czy można przypisać zmiennej typu number wartość undefined przy 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

Przykłady rzeczywistych błędów z powodu nieznajomości niuansów tematu.


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.