Saltar al contenido principal
eLearner.app
Módulo 6 · Lección 1 de 211/14 en el curso~15 min
Lecciones del módulo (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

Ejercicio#ts.m6.l1.e1
Intentos: 0Cargando...

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

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos

Esercizio 2: Estrarre il tipo da un Array con infer

Ejercicio#ts.m6.l1.e2
Intentos: 0Cargando...

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.

Cargando editor...
Mostrar pista

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

Solución disponible después de 3 intentos