Défi
Énoncé
Définir type Result<T, E> = { ok: true; valeur: T } | { ok: false; erreur: E }. Écrire la fonction division(a: number, b: number): Result<number, string> qui retourne { ok: true, valeur: a / b } si b !== 0, et { ok: false, erreur: "division par zéro" } sinon. Appeler la fonction avec deux paires de valeurs et afficher soit le résultat soit l'erreur en utilisant le narrowing sur le champ ok.
Contraintes
- TypeScript ≥ 5.0, mode strict activé.
- Le discriminant doit être le champ
ok: true/ok: false(pas un champtypeoukind). - Utiliser un
if (res.ok)pour le narrowing — pas de castas. - Dans la branche
ok === true, le compilateur doit inférer queres.valeurexiste ; dans la brancheok === false, queres.erreurexiste. - Pas de bibliothèque externe.
Exemple
Pour les appels division(10, 2) puis division(5, 0), sortie attendue :
Résultat : 5
Erreur : division par zéro
Le vrai test est à la compilation : accéder à res.valeur sans avoir vérifié
res.ok doit être refusé par tsc.