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)

Tipi Condizionali e infer

I tipi condizionali permettono di esprimere decisioni di tipo non banali basandosi su relazioni di ereditarietà. La sintassi assomiglia a quella dell'operatore ternario di JavaScript:

TS
T extends U ? X : Y

Se il tipo T è assegnabile a U, allora il tipo risultante sarà X, altrimenti sarà Y.


Tipi Condizionali Base

Un tipo condizionale valuta una condizione a livello di tipo statically:

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

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

Questo pattern è estremamente potente quando combinato con i generics per creare utility types flessibili e dinamici.


Estrazione di Tipi con infer

All'interno della clausola extends di un tipo condizionale, possiamo usare la parola chiave infer per dichiarare una variabile di tipo che deve essere dedotta dal compilatore.

Ad esempio, se vogliamo estrarre il tipo restituito da una funzione:

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

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

In questo esempio, infer R indica a TypeScript di ricavare automaticamente il tipo di ritorno della funzione e di renderlo disponibile come R nel ramo positivo del condizionale.


Prova tu

Esercizio 1: Il tipo IsString

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

Crea un tipo generico chiamato IsString<T> che restituisce il tipo letterale true se T estende string, altrimenti false.

Chargement de l'éditeur…
Afficher l'indice

Usa la sintassi type IsString<T> = T extends string ? true : false; per controllare il tipo.

Solution disponible après 3 tentatives

Esercizio 2: Estrarre il tipo da un Array con infer

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

Definisci un tipo generico UnpackArray<T> che usa infer per estrarre il tipo degli elementi di un array T. Se T è un array (ad esempio U[]), restituisce U, altrimenti restituisce lo stesso tipo T.

Chargement de l'éditeur…
Afficher l'indice

Usa T extends (infer U)[] ? U : T per dichiarare e restituire la variabile di tipo dedotta U.

Solution disponible après 3 tentatives