Vai al contenuto
eLearner.app
Modulo 6 · Lezione 1 di 211/14 nel corso~15 min
Lezioni del modulo (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

Esercizio#ts.m6.l1.e1
Tentativi: 0Caricamento…

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

Caricamento editor…
Mostra suggerimento

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

Soluzione disponibile dopo 3 tentativi

Esercizio 2: Estrarre il tipo da un Array con infer

Esercizio#ts.m6.l1.e2
Tentativi: 0Caricamento…

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.

Caricamento editor…
Mostra suggerimento

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

Soluzione disponibile dopo 3 tentativi