Défi
Énoncé
Définir le type type Couleur = "rouge" | "vert" | "orange" et une fonction prochaine(c: Couleur): Couleur qui retourne la couleur suivante dans le cycle rouge → vert → orange → rouge. Le compilateur TypeScript doit rejeter tout appel avec une valeur hors de l'union. Afficher les trois transitions successives à partir de "rouge".
Contraintes
- TypeScript ≥ 5.0, mode strict activé (
"strict": true). - Le type
Couleurdoit être une union de littéraux de typestring(pas unenum). - La fonction
prochainedoit être exhaustive : utiliser unswitchou une correspondance complète. Le compilateur doit signaler un oubli si une branche manque (via unnevercheck ouas never). - Pas de bibliothèque externe.
Exemple
type Couleur = "rouge" | "vert" | "orange";
function prochaine(c: Couleur): Couleur {
switch (c) {
case "rouge": return "vert";
case "vert": return "orange";
case "orange": return "rouge";
default:
const _exhaustif: never = c;
throw new Error(`Couleur inconnue : ${_exhaustif}`);
}
}
let c: Couleur = "rouge";
for (let i = 0; i < 3; i++) {
const suivante = prochaine(c);
console.log(`${c} → ${suivante}`);
c = suivante;
}
rouge → vert
vert → orange
orange → rouge