TypeScriptLeçon 12 sur 16

Gardes de type : typeof, in, instanceof

Une garde de type est un test après lequel TypeScript connaît le type exact d'une valeur. On en a surtout besoin pour unknown et pour les données venues de l'extérieur.

L’essentiel

  • typeof convient aux primitives : "string", "number", "boolean".
  • "meow" in pet teste la présence d'une propriété et choisit le bon membre de l'union.
  • instanceof fonctionne avec les classes : error instanceof ApiError.
  • Le prédicat value is Contact transforme une simple fonction de test en garde de type.
  • filter avec un prédicat renvoie un tableau du bon type, et non unknown[].

Exemple

class ApiError {  constructor(public code: number) {}} interface Cat {  meow(): string;}interface Dog {  bark(): string;} function speak(pet: Cat | Dog): string {  return "meow" in pet ? pet.meow() : pet.bark(); // "in" narrows to Cat} function isText(value: unknown): value is string {  return typeof value === "string"; // a custom type predicate} function explain(error: unknown): string {  if (error instanceof ApiError) return `API error ${error.code}`;  if (isText(error)) return `Message: ${error}`;  return "Unknown error";} console.log(speak({ meow: () => "Meow!" }));console.log(explain(new ApiError(404)));console.log(explain("timeout"));console.log(explain(42));

explain accepte n'importe quoi, mais chaque branche connaît le type : ApiError a un code, et la chaîne peut aller dans le texte. Sans le prédicat isText, TypeScript n'affinerait pas unknown en string.

Exercice

Utiliser l’éditeur⌘ Entrée ou Ctrl Entrée lance le code, ⇧ ⌘ Entrée vérifie l’exercice.Tab et Maj Tab indentent la ligne ou la sélection ; Échap puis Tab quitte l’éditeur.La vérification compare ce que le programme a affiché à l’exercice ; les espaces en fin de ligne ne comptent pas.Après deux vérifications ratées, la solution s’ouvre. Votre code reste dans ce navigateur.

Transformez isContact en prédicat value is Contact avec une vérification complète, affichez chaque contact sous la forme « Ivan: 555-0101 » puis « Valid: 2 of 5 ».

Sortie

Ce que le programme affiche apparaîtra ici.