TypeScriptLeçon 13 sur 16
Unions discriminées
Une union discriminée regroupe des types objets qui partagent un champ étiquette, comme kind ou status. Grâce à l'étiquette, TypeScript sait quels autres champs l'objet possède.
L’essentiel
- L'étiquette est un champ littéral différent pour chaque membre : kind: "circle".
- Un switch sur l'étiquette affine l'objet dans chaque case.
- Dans default, affectez la valeur à une variable never : c'est le contrôle d'exhaustivité.
- Ajoutez un membre et oubliez son case : le compilateur signale une erreur.
Exemple
type Shape = | { kind: "circle"; radius: number } | { kind: "square"; side: number }; function area(shape: Shape): number { switch (shape.kind) { case "circle": return Math.PI * shape.radius ** 2; // shape is the circle here case "square": return shape.side ** 2; // and the square here default: { // if a new kind is added to Shape and not handled, this line turns red const unreachable: never = shape; return unreachable; } }} console.log(area({ kind: "square", side: 3 }));console.log(area({ kind: "circle", radius: 1 }).toFixed(2));radius est disponible dans case "circle", side dans case "square". Ajoutez un triangle à Shape et la ligne never devient rouge aussitôt.
Exercice
Utiliser l’éditeur⌘ Entrée ou Ctrl Entrée lance le code, ⇧ ⌘ Entrée vérifie l’exercice.Tab et Maj Tab indentent la ligne ou la sélection ; Échap puis Tab quitte l’éditeur.La vérification compare ce que le programme a affiché à l’exercice ; les espaces en fin de ligne ne comptent pas.Après deux vérifications ratées, la solution s’ouvre. Votre code reste dans ce navigateur.Ajoutez à RequestState un membre error avec un champ message, traitez-le dans render, écrivez un default avec never et placez l'état d'erreur dans le tableau. La dernière ligne affichée est « Error: Not found ».
Sortie
Ce que le programme affiche apparaîtra ici.