Types nullables ('strictNull')
Fait partie de la section Introduction à TypeScript du Journey JavaScript de Coddy. Leçon 71 sur 73.
Par défaut, TypeScript permet d'assigner null et undefined à n'importe quel type, ce qui peut entraîner des erreurs d'exécution. L'option de compilation strictNullChecks modifie ce comportement en faisant de null et undefined leurs propres types distincts.
Lorsque strictNullChecks est activé, vous devez explicitement inclure null ou undefined dans vos annotations de type si vous souhaitez autoriser ces valeurs :
// Sans strictNullChecks - ceci serait autorisé
let name: string = null; // Erreur avec strictNullChecks !
// Avec strictNullChecks - vous devez être explicite
let name: string | null = null; // Maintenant, cela fonctionneCela vous oblige à gérer les potentielles valeurs null avant de les utiliser. Vous ne pouvez pas appeler de méthodes ou accéder à des propriétés sur une valeur qui pourrait être null sans avoir vérifié au préalable :
function processName(name: string | null) {
// Cela provoquerait une erreur
// console.log(name.toUpperCase());
// Vous devez d'abord vérifier
if (name !== null) {
console.log(name.toUpperCase()); // Sûr à utiliser
}
}Cette option du compilateur aide à prévenir les erreurs d'exécution courantes « Cannot read property of null » en les détectant au moment de la compilation, rendant votre code plus fiable et prévisible.
Défi
FacileCréez une fonction qui traite en toute sécurité les données de profil utilisateur pouvant contenir des valeurs null. Ce défi démontre comment strictNullChecks vous oblige à gérer explicitement les types nullables.
Créez une fonction nommée getUserDisplayName qui :
- Prend un paramètre
fullNamede typestring | null - Retourne le nom complet s'il n'est pas
null - Retourne
"Anonymous User"si le nom complet estnull - A un type de retour explicite
string
Créez une deuxième fonction nommée formatUserEmail que :
- Prend un paramètre
emailde typestring | null - Retourne l'e-mail en minuscules s'il n'est pas
null - Retourne
"No email provided"si l'e-mail estnull - A un type de retour explicite
string
Créez une troisième fonction nommée getUserInfo qui :
- Prend deux paramètres :
namede typestring | nulletemailde typestring | null - Utilise les deux fonctions précédentes pour traiter les paramètres
- Retourne une chaîne formatée :
"Name: [processed name], Email: [processed email]" - A un type de retour explicite
string
Testez vos fonctions avec les données suivantes :
- Appelez
getUserDisplayName("John Smith")et affichez le résultat - Appelez
getUserDisplayName(null)et affichez le résultat - Appelez
formatUserEmail("ALICE@EXAMPLE.COM")et affichez le résultat - Appelez
formatUserEmail(null)et affichez le résultat - Appelez
getUserInfo("Bob Johnson", "bob@test.com")et affichez le résultat - Appelez
getUserInfo(null, null)et affichez le résultat - Appelez
getUserInfo("Sarah Wilson", null)et affichez le résultat
Essayez vous-même
// À FAIRE : Écrivez votre code ici
// Créez la fonction getUserDisplayName qui prend fullName (string | null) et retourne une chaîne de caractères
// Créez la fonction formatUserEmail qui prend email (string | null) et retourne une chaîne de caractères
// Créez la fonction getUserInfo qui prend name et email (tous deux string | null) et retourne une chaîne de caractères
// Testez les fonctions et affichez les résultats
console.log(getUserDisplayName("John Smith"));
console.log(getUserDisplayName(null));
console.log(formatUserEmail("ALICE@EXAMPLE.COM"));
console.log(formatUserEmail(null));
console.log(getUserInfo("Bob Johnson", "bob@test.com"));
console.log(getUserInfo(null, null));
console.log(getUserInfo("Sarah Wilson", null));Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à TypeScript
1Premiers pas avec TS
Qu'est-ce que TypeScript ?Pourquoi utiliser TypeScript ?Votre premier code TypeScriptProcessus de compilation et erreursRécapitulatif : Introduction à TS4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions fléchéesLe type de retour 'void'Paramètres optionnels avec '?'Valeurs par défaut des paramètresTypage des paramètres RestDéfinir des types de fonctionsRécapitulatif : Créer des fonctions typées2Types fondamentaux
Types de base : str, num, booleanLe type 'any' : la porte de sortieLe type 'unknown'Travailler avec 'null' et 'undef'L'inférence de type en actionAnnotations de type explicitesRécapitulatif : Pratique des types fondamentaux5Types : Alias, Unions & Intersections
Alias de types pour les primitifsTypes d'union ('|')Travailler avec les types d'unionTypes littérauxTypes d'intersection ('&')Combiner des alias de typesRécapitulatif : Combinaisons de types avancées8Énumérations
Qu'est-ce qu'une énumération numérique ?Utiliser les énumérations numériquesQu'est-ce qu'une énumération de chaînes ?Utiliser les énumérations de chaînesÉnumérations hétérogènesRécapitulatif : Utiliser les énumérations11Sujets avancés
Assertions de typeType Guards : in & instanceofLe type 'never'Types nullables ('strictNull')Signatures d'index pour les objetsRécapitulatif : Affiner les types3Structure de données : Tableaux et Tuples
Tableaux typésModificateur 'readonly' pour les tableauxQu'est-ce qu'un tuple ?Déclaration et accès aux tuplesDéstructuration de tuplesTuples readonlyTableaux typés multidimensionnelsSpread operator avec les tableauxRécapitulatif : Tableaux et tuples6Typage des objets et interfaces
Annotations de type d'objet en ligneAlias de type pour les objetsIntroduction aux interfacesInterfaces vs Alias de typePropriétés optionnelles et ReadonlyÉtendre les interfaces et les typesAjout de méthodes aux interfacesRécapitulatif : Définir la structure des objetsEntraînez-vous par vous-même : Playground TypeScript