Sobes.tech
Middle

Avez-vous déjà utilisé des unions discriminantes et des guards de type ? Quels guards de type intégrés connaissez-vous ?

sobes.tech IA

Réponse de l'IA

Les unions discriminées (discriminated unions) et les guards de type sont des outils puissants de TypeScript pour travailler avec des unions de types, permettant d'identifier en toute sécurité un type spécifique dans l'union.

Unions discriminées sont des unions de types où chaque type possède une clé littérale commune (par exemple, le champ type), permettant d'identifier de manière unique un type.

Guards de type sont des fonctions ou constructions qui vérifient le type d'une variable au moment de l'exécution et restreignent le type pour le compilateur.

Les guards de type intégrés dans TypeScript :

  • typeof — pour les types primitifs (string, number, boolean)
  • instanceof — pour vérifier l'appartenance à une classe
  • in — pour vérifier la présence d'une propriété dans un objet

Exemple d'une union discriminée et d'un guard de type :

interface Carré {
  kind: 'square';
  size: number;
}

interface Cercle {
  kind: 'circle';
  radius: number;
}

type Forme = Carré | Cercle;

function aire(forme: Forme): number {
  switch (forme.kind) {
    case 'square':
      return forme.size * forme.size;
    case 'circle':
      return Math.PI * forme.radius ** 2;
  }
}

Ici, kind est le discriminant, et switch agit comme un guard de type.

Utilisation des guards de type intégrés :

function estString(valeur: unknown): valeur est string {
  return typeof valeur === 'string';
}

if (estString(quelqueChose)) {
  // ici, quelqueChose est de type string
}