Perché TypeScript Avanzato è Importante
Il sistema di tipi di TypeScript è Turing-completo. Utilizzando pattern avanzati, puoi catturare intere categorie di errori al tempo di compilazione, rendendo gli errori di esecuzione virtualmente impossibili per il codice ben tipizzato.
Tipi Marcati
Tipi marcati prevenono la confusione di valori che hanno lo stesso tipo di base ma significati diversi.
type UserId = string & { readonly __brand: "UserId" };
type OrderId = string & { readonly __brand: "OrderId" };
function getUser(id: UserId) { /* ... */ }
function getOrder(id: OrderId) { /* ... */ }
const userId = "user-123" as UserId;
const orderId = "order-456" as OrderId;
getUser(orderId); // Errore! Tipo 'OrderId' non assegnabile a 'UserId'
Tipi di Letterale di Template
Genera automaticamente modelli di stringhe sicuri per i tipi.
type EventName = "click" | "hover" | "focus";
type HandlerName = `on${Capitale<EventName>}`;
// Risultato: "onClick" | "onHover" | "onFocus"
Unioni Discriminate
Modella macchine di stato direttamente nel sistema di tipi.
type AsyncState<T> =
| { status: "idle" }
| { status: "loading" }
| { status: "success"; data: T }
| { status: "error"; error: Error };
Tipi Condizionali
Creare tipi che dipendono da altri tipi.
type ApiResponse<Endpoint> =
Endpoint estende "/users" ? User[] :
Endpoint estende `/users/${string}` ? User : never;
Conclusione
Pattern di TypeScript avanzati prevenire errori al tempo di compilazione. Inizia con i tipi marcati e le unioni discriminate — forniscono il maggior valore con la minima complessità.