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
type Result<T, E> = { ok: true; valeur: T } | { ok: false; erreur: E };
function division(a: number, b: number): Result<number, string> {
if (b === 0) return { ok: false, erreur: "division par zéro" };
return { ok: true, valeur: a / b };
}
function afficher(res: Result<number, string>): void {
if (res.ok) {
console.log(`Résultat : ${res.valeur}`);
} else {
console.log(`Erreur : ${res.erreur}`);
}
}
afficher(division(10, 2));
afficher(division(5, 0));
Résultat : 5
Erreur : division par zéro