Le paramètre strictNullChecks détermine si TypeScript considère null et undefined comme des types distincts ou non. Si le paramètre est désactivé (par défaut jusqu'à la version 2.0), les variables de tout type peuvent prendre les valeurs null et undefined sans erreurs de compilation. S'il est activé (strictNullChecks: true), ces valeurs sont considérées comme incompatibles avec d'autres types, sauf si cela est explicitement indiqué.
Exemple :
// strictNullChecks: false let name: string = null; // OK // strictNullChecks: true let title: string = null; // Erreur ! let title2: string | null = null; // OK, union de types explicite
L'activation de la vérification stricte aide à éviter les erreurs aux premiers stades du développement, lorsque les fonctions/méthodes ne s'attendent pas à recevoir null ou undefined.
Peut-on assigner à une variable de type
numberla valeurundefinedlorsque strictNullChecks est activé ?
Réponse : Non, si strictNullChecks est activé, une variable de type number ne peut pas recevoir undefined — sauf si son type est explicitement déclaré comme number | undefined.
Exemple :
let count: number = undefined; // Erreur TS avec strictNullChecks: true let count2: number | undefined = undefined; // OK
Histoire
Dans un grand projet node.js, les développeurs ont désactivé la vérification stricte de null/undefined pour « faciliter la migration ». En conséquence, un an après le lancement, l'une des fonctions de l'API a retourné undefined au lieu d'une valeur numérique. Le code client n'était pas préparé à cela, ce qui a provoqué un crash fatal de l'application côté utilisateur lors d'un simple calcul response.count + 1.
Histoire
Dans un projet e-commerce, la collection de produits est arrivée du serveur en tant que null, et non []. Le composant UI faisait un map sur ces produits, ce qui a entraîné une erreur de rendu. L'activation de strictNullChecks a immédiatement mis en évidence presque 40 endroits similaires.
Histoire
Dans une grande bibliothèque, avec le temps, le nombre de valeurs « autorisées » pour certains props de l'API de composants est devenu string | null | undefined. Cela a conduit à de nombreuses situations non gérées. Après l'activation de strictNullChecks, il a été possible de capturer des bugs non évidents entraînant des crashes de l'interface dans des configurations spécifiques.