Passer au contenu principal
eLearner.app
Module 6 · Leçon 1 sur 211/14 dans le cours~15 min
Leçons du module (1/2)

Types Conditionnels et infer

Les types conditionnels permettent d'exprimer des des décisions de types non triviales basées sur des relations d'héritage. La syntaxe ressemble à celle de l'opérateur ternaire de JavaScript :

TS
T extends U ? X : Y

Si le type T est assignable à U, alors le type résultant sera X, sinon ce sera Y.


Types conditionnels de base

Un type conditionnel évalue une condition au niveau du type de manière statique :

TS
type IsNumber<T> = T extends number ? true : false;

type A = IsNumber<number>; // true
type B = IsNumber<string>; // false

Ce motif est extrêmement puissant lorsqu'il est combiné avec des génériques pour créer des types d'utilité flexibles et dynamiques.


Extraction de types avec infer

À l'intérieur de la clause extends d'un type conditionnel, nous pouvons utiliser le mot-clé infer pour déclarer une variable de type qui doit être déduite par le compilateur.

Par exemple, si nous voulons extraire le type de retour d'une fonction :

TS
type GetReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

type FunzioneEsempio = () => string;
type Ritorno = GetReturnType<FunzioneEsempio>; // string

Dans cet exemple, infer R indique à TypeScript de déduire automatiquement le type de retour de la fonction et de le rendre disponible sous la forme R dans la branche positive de la condition.


À vous de jouer

Exercice 1 : Le type IsString

Exercice#ts.m6.l1.e1
Tentatives : 0Chargement…

Créez un type générique appelé IsString<T> qui renvoie le type littéral true si T étend string, sinon false.

Chargement de l'éditeur…
Afficher l'indice

Utilisez la syntaxe type IsString<T> = T extends string ? true : false; pour vérifier le type.

Solution disponible après 3 tentatives

Exercice 2 : Extraire le type d'un tableau avec infer

Exercice#ts.m6.l1.e2
Tentatives : 0Chargement…

Définissez un type générique UnpackArray<T> qui utilise infer pour extraire le type des éléments d'un tableau T. Si T est un tableau (par exemple U[]), il renvoie U, sinon il renvoie le même type T.

Chargement de l'éditeur…
Afficher l'indice

Utilisez T extends (infer U)[] ? U : T pour déclarer et renvoyer la variable de type déduite U.

Solution disponible après 3 tentatives