0Pricing
TypeScript Academy · Leçon

Gestion exhaustive des erreurs avec des unions discriminées

Écrivez des gestionnaires exhaustifs pour les unions discriminées à l’aide de switch+never, de fonctions utilitaires et de vérifications de couverture à la compilation entre les modules.

Gestion exhaustive des erreurs avec des unions discriminées est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 2. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 2 leçons au total.

Introduction

Objectif : garantir que chaque membre d’une union est traité. Vous utiliserez switch + never, une petite fonction utilitaire exhaustiveCheck et découvrirez comment conserver la couverture entre les fichiers.

  • Discriminants (champs tag)
  • Instructions switch exhaustives
  • Valeurs par défaut en cas d’échec immédiat

Union discriminée

Une union discriminée possède un tag commun (ici kind). Chaque variante contient ses propres données.

export type Payment =
  | { kind: "Card"; last4: string }
  | { kind: "Cash" }
  | { kind: "Wire"; iban: string }

Switch + never

La branche default affecte p à never. Si vous ajoutez une nouvelle variante ultérieurement, le compilateur signale une erreur jusqu’à ce que vous la traitiez.

export function describe(p: Payment): string {
  switch (p.kind) {
    case "Card": return `Card ••••${p.last4}`
    case "Cash": return "Cash"
    case "Wire": return `Wire ${p.iban}`
    default: {
      const _exhaustive: never = p
      return _exhaustive
    }
  }
}

Fonction utilitaire exhaustiveCheck

Utilisez une petite fonction utilitaire pour rendre l’intention évidente. Le paramètre never transforme les cas non traités en erreur de type, et non en une simple exception à l’exécution.

export function exhaustiveCheck(x: never): never {
  throw new Error(`Unhandled case: ${JSON.stringify(x)}`)
}

export function pay(p: Payment): string {
  switch (p.kind) {
    case "Card": return "charged card"
    case "Cash": return "took cash"
    case "Wire": return "initiated wire"
    default: return exhaustiveCheck(p)
  }
}

Couverture entre modules

Lorsque les unions sont définies dans un fichier et traitées dans un autre, l’ajout d’une branche interrompt toujours les compilations jusqu’à la mise à jour de toutes les instructions switch — exactement le comportement recherché.

// errors.ts
export type AppError =
  | { tag: "Auth"; reason: "Unauthorized" | "Forbidden" }
  | { tag: "NotFound"; resource: string }
  | { tag: "Conflict"; resource: string }

// handler.ts
import type { AppError } from "./errors"
import { exhaustiveCheck } from "./exhaustive"

export function toStatus(e: AppError): number {
  switch (e.tag) {
    case "Auth": return e.reason === "Unauthorized" ? 401 : 403
    case "NotFound": return 404
    case "Conflict": return 409
    default: return exhaustiveCheck(e)
  }
}

Conseils et pièges

Conseils :

  • Préférez les tags littéraux de chaîne (par exemple tag/kind).
  • Gardez les variantes petites ; composez les données avec des objets imbriqués plutôt qu’avec d’immenses unions.
  • N’utilisez jamais default sans garde never ; cela masque les cas manquants.

Vérification de l’exhaustivité

Vérification rapide : qu’est-ce qui impose de traiter tous les cas ?

Récapitulatif

Récapitulatif : utilisez un discriminant, écrivez une instruction switch et, dans la branche par défaut, affectez la valeur à never (ou appelez exhaustiveCheck) pour garantir une couverture complète à mesure que les unions évoluent.

Questions Fréquemment Posées

La leçon « Gestion exhaustive des erreurs avec des unions discriminées » est-elle gratuite ?

Oui — le texte complet de « Gestion exhaustive des erreurs avec des unions discriminées » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 2 leçons au total.

Qu'est-ce que j'apprendrai dans « Gestion exhaustive des erreurs avec des unions discriminées » ?

Écrivez des gestionnaires exhaustifs pour les unions discriminées à l’aide de switch+never, de fonctions utilitaires et de vérifications de couverture à la compilation entre les modules. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer TypeScript Academy ?

Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 2.

Combien de temps prend la leçon « Gestion exhaustive des erreurs avec des unions discriminées » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?

Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Types de style Result/Either
  2. Gestion exhaustive des erreurs avec des unions discriminées
← Retour à TypeScript Academy