Kodokon kodokon.com

Inférence, any et unknown

Laissez TypeScript deviner les types grâce à l'inférence, et comprenez pourquoi préférer unknown au dangereux any.

8 min · 3 questions

Ouvrir cette leçon dans Kodokon

Bonne nouvelle : vous n'êtes pas obligé d'annoter chaque variable. Grâce à l'inférence de type, TypeScript devine le type d'une variable à partir de la valeur que vous lui donnez. Écrire let city = "Lyon" suffit : TypeScript sait que city est un string et le protège comme si vous l'aviez annoté.

TYPESCRIPT
let city = "Lyon"; // type deviné : string
let count = 3;     // type deviné : number

count = count + 1; // accepté
// city = 42; -> erreur : city reste un string
Aucune annotation, mais les types sont bien là.

Le type any signifie « n'importe quoi ». Une variable any échappe à toutes les vérifications : TypeScript accepte tout, sans contrôler. C'est comme retirer la ceinture de sécurité : le code compile, mais les erreurs reviennent à l'exécution, exactement ce que TypeScript devait empêcher.

TYPESCRIPT
let data: any = "bonjour";
data = 42; // accepté sans broncher

// Compile, mais plante à l'exécution :
// data.toUpperCase() n'existe pas sur un nombre !
Avec any, TypeScript ferme les yeux.

Pour une valeur dont le type est réellement inconnu (une réponse de serveur, une saisie utilisateur), préférez unknown. Comme any, il accepte n'importe quelle valeur, mais il vous oblige à vérifier le type (par exemple avec typeof) avant de vous en servir. La sécurité reste donc intacte.

TYPESCRIPT
let value: unknown = "bonjour";

// console.log(value.toUpperCase()); -> refusé !

if (typeof value === "string") {
  console.log(value.toUpperCase()); // "BONJOUR"
}
unknown force une vérification avant usage.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Qu'est-ce que l'inférence de type ?
    • TypeScript devine le type d'après la valeur initiale
    • TypeScript supprime les types du programme
    • TypeScript convertit les nombres en textes
  2. Pourquoi faut-il éviter any autant que possible ?
    • Il ralentit le programme
    • Il désactive les vérifications de TypeScript
    • Il est interdit par le langage
    • Il ne fonctionne que sur les nombres
  3. Que faut-il faire avant d'utiliser une valeur de type unknown ?
    • Vérifier son type, par exemple avec typeof
    • La convertir en any
    • La déclarer une seconde fois