TypeScript è diventato uno strumento indispensabile per gli sviluppatori moderni, offrendo potenti funzionalità per garantire basi di codice robuste e gestibili. Tra le sue funzionalità più avanzate ci sono Tipi condizionali E Tipi mappati, che forniscono un controllo granulare sulle trasformazioni e sulle decisioni dei tipi. Queste funzionalità sbloccano un’incredibile flessibilità e precisione, rendendo TypeScript molto più di un semplice “JavaScript con tipi”.
In questo blog approfondiremo questi tipi avanzati, esploreremo la loro sintassi e i casi d’uso e scopriremo come possono migliorare i tuoi progetti TypeScript.
I tipi condizionali consentono di esprimere relazioni di tipo e logica che dipendono dalle condizioni. Sono simili all’operatore ternario di JavaScript ma adattati ai tipi.
T extends U ? X : Y
Questo si legge come: Se T si estende IN, allora il tipo è X; altrimenti lo è E.
Caso d’uso: inferenza semplificata dei tipi
Immagina di voler creare un tipo di utilità che estrae il tipo restituito di una funzione. Utilizzando i tipi condizionali, puoi ottenere questo risultato facilmente:
type ReturnType<T> = T extends (…args: any[]) => infer R ? R : never;
const exampleFn = (x: number): string => x.toString(); type ExampleReturnType = ReturnType<typeof exampleFn>; // string
Ecco, il dedurre La parola chiave viene utilizzata per acquisire ed estrarre il tipo restituito.

Caso d’uso: esclusione di tipi
I tipi condizionali brillano anche nel filtraggio dei tipi. Ad esempio, puoi creare un tipo che escluda determinati tipi:
type Exclude<T, U> = T extends U ? never : T;
type AllowedTypes = Exclude<string | number | boolean, boolean>; // string | number
I tipi mappati consentono di trasformare sistematicamente le proprietà di un determinato tipo. Sono incredibilmente utili per creare variazioni di tipi esistenti senza ripetizione manuale.
type MappedType<T> = { [P in keyof T]: Transformation };
Qui, P scorre sulle chiavi di Ted è possibile applicare qualsiasi trasformazione ai tipi di proprietà.
Caso d’uso: Rendere le proprietà opzionali
Supponiamo di avere un tipo in cui desideri rendere facoltative tutte le proprietà:
type Partial<T> = { [P in keyof T]?: T[P]; };
type User = { name: string; age: number; };
type OptionalUser = Partial<User>; // { name?: string; age?: number }

Caso d’uso: Proprietà di sola lettura
Puoi rendere tutte le proprietà di sola lettura utilizzando i tipi mappati:
type Readonly<T> = { readonly [P in keyof T]: T[P]; };
type ReadonlyUser = Readonly<User>;
Il vero potere di questi tipi emerge quando vengono combinati. Ad esempio, puoi creare un tipo di utilità che rende le proprietà di sola lettura solo se soddisfano una determinata condizione:
type ReadonlyIfString<T> = { [P in keyof T]: T[P] extends string ? Readonly<T[P]> : T[P]; };
type MixedType = { name: string; age: number; };
type ConditionalReadonly = ReadonlyIfString<MixedType>;
Comprendere e sfruttare i tipi condizionali e mappati aumenterà le tue abilità di TypeScript al livello successivo. Questi tipi avanzati non solo migliorano l’indipendenza dai tipi, ma aiutano anche a creare codice più espressivo, riutilizzabile e gestibile. Che tu abbia a che fare con risposte API, convalida di moduli o filtraggio dei tipi, questi strumenti offrono la flessibilità necessaria per creare sistemi di tipi più intelligenti.
TypeScript continua a estendere i limiti della digitazione statica in JavaScript e padroneggiare queste funzionalità è un passo verso lo sblocco del suo pieno potenziale. Buona programmazione!
Hey, having any query? Our experts are just one click away to respond you.
Contact Us