0Pricing
TypeScript Academy · Leçon

Vérification de l’exhaustivité avec never

Utilisez never pour garantir que tous les cas d’une union sont traités

Vérification de l’exhaustivité avec never est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. 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 4 leçons au total.

Bienvenue

La vérification d’exhaustivité utilise le type `never` pour garantir que chaque cas d’une union est géré. Lorsque vous ajoutez un nouveau membre à l’union, TypeScript vous indique précisément où mettre votre code à jour.

Le problème d’exhaustivité

Lorsque vous utilisez switch sur un type d’union et oubliez un cas, JavaScript poursuit silencieusement l’exécution. TypeScript peut le détecter grâce à une vérification avec never.
type Shape = 'circle' | 'square';
function area(s: Shape): number {
  if (s === 'circle') return 3.14;
  if (s === 'square') return 1;
  // What if we add 'triangle'?
}

Motif d’exhaustivité avec `never`

Affectez la valeur restante à `never`. Si TypeScript déduit un type différent de `never`, cela signifie qu’un cas n’est pas traité.
function assertNever(x: never): never {
  throw new Error('Unexpected value: ' + x);
}
function area(s: Shape): number {
  switch (s) {
    case 'circle': return 3.14;
    case 'square': return 1;
    default: return assertNever(s);
  }
}

Ajout d’un nouveau membre d’union

Si vous ajoutez 'triangle' à l’union Shape, TypeScript signale une erreur à `assertNever(s)` et vous demande de traiter le nouveau cas.
type Shape = 'circle' | 'square' | 'triangle';
// Now TypeScript errors on assertNever(s) because s is 'triangle'
// — it's not never!

Vérification inline de `never`

Vous pouvez effectuer une vérification d’exhaustivité inline sans fonction utilitaire.
function handle(shape: Shape): string {
  switch (shape.kind) {
    case 'circle': return 'circle';
    case 'square': return 'square';
    default:
      const _: never = shape; // Error if not exhaustive
      throw new Error('Unknown shape');
  }
}

Exhaustivité sans `switch`

Utilisez la même technique dans les chaînes if/else.
function process(action: Action): void {
  if (action.type === 'A') { /* ... */ }
  else if (action.type === 'B') { /* ... */ }
  else {
    const _: never = action; // exhaustive
  }
}

`never` dans les contraintes de types génériques

`never` est le type inférieur et s’avère utile dans les types conditionnels pour représenter les branches impossibles.
type NonNullable<T> = T extends null | undefined ? never : T;
// Removes null and undefined from T

Utiliser `never` pour les états impossibles

Le type `never` est utile pour modéliser les états qui devraient être impossibles dans votre système de types.
type State<T> =
  | { kind: 'loading' }
  | { kind: 'success'; data: T }
  | { kind: 'error'; msg: string };
// There should never be a state with kind: 'unknown'

`never` dans les types conditionnels

Le type `never` est utilisé dans les types conditionnels pour éliminer les membres de type indésirables.
type NonFunctions<T> = {
  [K in keyof T]: T[K] extends Function ? never : K
}[keyof T];
// Returns keys whose values are not functions

`never` se propage dans les unions

`never` est l’élément neutre des types d’union — T | never = T.
type T = string | never; // string
type U = never | number | never; // number

La fonction utilitaire `assertNever`

Chaque projet TypeScript devrait disposer d’une fonction utilitaire simple comme `assertNever` pour effectuer des vérifications d’exhaustivité.
function assertNever(value: never, message?: string): never {
  throw new Error(message ?? `Unhandled: ${JSON.stringify(value)}`);
}

Vérification rapide

Que se passe-t-il à la ligne `default: assertNever(s)` si `s` possède encore un type possible qui n’est pas traité ?

Récapitulatif

Utilisez assertNever(x: never) dans les cas par défaut de switch afin d’obtenir des erreurs de compilation lorsque des membres d’une union ne sont pas traités. Votre code reste ainsi correct à mesure que l’union évolue.

Questions Fréquemment Posées

La leçon « Vérification de l’exhaustivité avec never » est-elle gratuite ?

Oui — le texte complet de « Vérification de l’exhaustivité avec never » 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 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Vérification de l’exhaustivité avec never » ?

Utilisez never pour garantir que tous les cas d’une union sont traités 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 4 sur 4.

Combien de temps prend la leçon « Vérification de l’exhaustivité avec never » ?

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. Rétrécissement avec typeof et la véracité
  2. Rétrécissement avec instanceof et in
  3. Fonctions de garde de types définies par l’utilisateur
  4. Vérification de l’exhaustivité avec never
← Retour à TypeScript Academy