TypeScriptLeçon 9 sur 16

Enum ou union de littéraux

Un enum crée un véritable objet qui reste dans le JavaScript compilé. Une union de littéraux disparaît sans laisser de trace et reste souvent plus simple.

L’essentiel

  • Un enum numérique compte à partir de zéro et fonctionne dans les deux sens : Role[1] vaut "Member".
  • Un enum de chaînes, Open = "open", garde des valeurs lisibles dans les logs.
  • L'union "free" | "pro" | "team" disparaît tout simplement à la compilation.
  • Un tableau avec as const donne à la fois une liste à parcourir et un type : (typeof LEVELS)[number].
  • L'exécution directe des .ts par Node.js et l'option erasableSyntaxOnly refusent les enum.

Exemple

enum Role {  Guest,  Member,  Admin,}// After compiling, Role is a real object: { Guest: 0, Member: 1, Admin: 2, ... }console.log(`Admin = ${Role.Admin}, 1 = ${Role[1]}`); type Plan = "free" | "pro" | "team"; // disappears after compilingconst plan: Plan = "pro"; const LEVELS = ["low", "medium", "high"] as const;type Level = (typeof LEVELS)[number]; // "low" | "medium" | "high"const level: Level = "high"; console.log(`${plan} / ${level} / ${LEVELS.length} levels`);

En JavaScript, Role est un objet avec des propriétés et des clés inverses. Plan et Level n'existent que pour la vérification : il n'en reste pas une ligne dans le code compilé.

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.

Remplacez enum Status par un tableau STATUSES avec as const et un type qui en découle, puis parcourez-le et affichez trois lignes : « open: waiting for reply », « pending: in progress », « closed: done ».

Sortie

Ce que le programme affiche apparaîtra ici.