Aller au contenu principal
U/
Types
typescript

Result<T, E> en union discriminée

Définir un type Result générique avec union discriminée, implémenter une fonction division qui retourne Result<number, string>, et utiliser le narrowing typé pour traiter les deux cas.

30 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

É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 champ type ou kind).
  • Utiliser un if (res.ok) pour le narrowing — pas de cast as.
  • Dans la branche ok === true, le compilateur doit inférer que res.valeur existe ; dans la branche ok === false, que res.erreur existe.
  • 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
Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.