Esplorazione dei tipi avanzati in TypeScript: Tipi condizionali e mappati

Mar 28, 2025
content_copy

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.

Cosa sono i tipi condizionali?

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

Cosa sono i tipi mappati?

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>;

Combinazione di tipi mappati e condizionali

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>;

Applicazioni del mondo reale

  • Gestione delle risposte API

    I tipi condizionali e mappati possono aiutare a creare tipi precisi per le risposte API, rendendo più sicura la gestione degli errori e la trasformazione dei dati.

    type ApiResponse<T> = { data: T extends null | undefined ? never : T; error: string | null; };

    type UserData = { name: string; age: number };

    type UserResponse = ApiResponse<UserData | null>;

  • Convalida dei moduli

    Quando crei moduli, puoi utilizzare i tipi mappati per creare dinamicamente i tipi per le regole di convalida:

    type ValidationRules<T> = { [P in keyof T]?: (value: T[P]) => boolean; };

    type FormValues = { email: string; password: string; };

    type FormValidation = ValidationRules<FormValues>;

Principali insegnamenti

  • Tipi condizionali apportare trasformazioni di tipo dinamico basate su condizioni, rendendo TypeScript un potente strumento per la programmazione generica.

  • Tipi mappati consentono di creare variazioni di tipi esistenti con il minimo sforzo.

  • Insieme, consentono agli sviluppatori di creare utilità di tipo altamente riutilizzabili e precise, riducendo i parametri standard e migliorando la sicurezza del codice.

Conclusione

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!

Lascia un commento

We welcome relevant and respectful comments. Off-topic comments may be removed.

×

Hey, having any query? Our experts are just one click away to respond you.

Contact Us
×
Always Available to help you

Connect With:

HR Sales
Whatsapp Logo
Get Quote
expand_less