Ciao, e benvenuto nella quarta puntata della quarantaseiesima stagione. Se i tipi fossero una cosa da scrivere dappertutto, a mano, su ogni riga, TypeScript sarebbe sfiancante, una tassa su ogni gesto. Non lo è. E il motivo è una delle sue funzioni più silenziose e intelligenti: la maggior parte dei tipi non li scrivi mai. È TypeScript a capirli da solo. Oggi parliamo dei tipi che non scrivi: l'inferenza.
Partiamo da un esempio semplice, perché rende tutto chiaro. Immagina di dire: questa scatola contiene il numero cinque. Non hai bisogno di aggiungere anche questa è una scatola di numeri. TypeScript lo deduce da sé: vede il cinque, e conclude che la scatola contiene numeri. E da quel momento in poi, se provi a metterci dentro una parola, ti ferma: aspetta, questa era una scatola di numeri. Non gliel'hai detto tu: l'ha capito guardando cosa hai fatto. Osserva le tue azioni e ne ricava i tipi, in silenzio, sullo sfondo, senza che tu debba dichiarare nulla.
Voglio darti il nome e il perché conta, perché è il cuore della puntata. Questo si chiama inferenza: dedurre i tipi invece di farseli dire. Ed è la ragione per cui TypeScript riesce ad aggiungere un intero strato di controllo, pur lasciandoti scrivere quasi come se fosse normale JavaScript. Tu scrivi in modo naturale, e i tipi si condensano attorno al tuo codice come il fiato sul vetro, per lo più invisibili. Non devi fermarti a etichettare ogni cosa: la maggior parte del lavoro di tipizzazione avviene da sola, mentre pensi ad altro, cioè al problema che stai risolvendo.
Voglio dirti dove invece i tipi li scrivi tu, perché c'è un equilibrio preciso. Se quasi tutto è dedotto, dove metti mano tu? Ai confini importanti. Ai bordi di una funzione, per esempio: prendo un nome e un'età, restituisco un saluto. E alla forma dei tuoi dati principali. Perché quelli sono i contratti, le promesse che vale la pena dichiarare a voce alta, i punti dove dici chiaramente cosa entra e cosa esce. Dentro, nei dettagli, TypeScript riempie da solo. L'equilibrio è questo, ed è saggio: dichiara i contratti, lascia dedurre i dettagli. Scrivi i tipi dove servono a te e agli altri per capirsi, e taci sul resto.
Voglio farti apprezzare perché questo sia decisivo, perché tocca l'adozione. Ecco perché l'inferenza è così importante: rende la sicurezza a buon mercato. Uno strumento che devi imboccare di continuo, che ti chiede attenzione a ogni riga, prima o poi lo abbandoni: costa troppo. Uno strumento che invece si arrangia da solo per la maggior parte del lavoro, e ti disturba solo quando serve davvero, quello lo tieni. L'inferenza è ciò che fa la differenza tra un peso e un aiuto. Un pedaggio pagato a ogni riga sarebbe stato insopportabile; un aiuto quasi gratuito, invece, è irresistibile. Molte buone idee muoiono non perché siano sbagliate, ma perché costano troppo da usare.
Voglio darti l'immagine che rende chiara questa idea, perché è quotidiana. Pensa a un bravo assistente a cui non devi raccontare ogni singolo passo. Gli dici l'obiettivo e i confini: ecco cosa ti do, ecco cosa deve venir fuori. E lui lavora la parte in mezzo da solo, ricostruendo i dettagli, e ti interpella solo quando qualcosa è davvero ambiguo e serve una tua decisione. Un assistente che ti facesse domande su ogni minimo gesto sarebbe più lavoro di farlo da solo. Uno che coglie l'intenzione e riempie i vuoti, invece, ti moltiplica. L'inferenza di TypeScript è quel secondo tipo di assistente.
Voglio trarre la lezione generale, perché va oltre i tipi. La lezione è che gli strumenti che sopravvivono sono quelli che chiedono poco in cambio di ciò che danno. La cleverness che toglie cerimonia, invece di aggiungerne, è ciò che fa sì che una buona idea venga davvero adottata, e non solo ammirata. La sicurezza migliore non è quella più completa in teoria: è quella che paghi a un prezzo così basso da non pensarci nemmeno. Rendere una cosa buona anche facile, quasi gratuita, è spesso ciò che decide se quella cosa entrerà nella vita delle persone o resterà un bell'esperimento.
Per oggi ci fermiamo qui. Abbiamo visto perché TypeScript non è una tassa su ogni riga: la maggior parte dei tipi non li scrivi, li deduce lui. Dici che una scatola contiene un cinque, e capisce da solo che è una scatola di numeri, fermandoti se poi provi a metterci una parola. Questa è l'inferenza, e permette a TypeScript di aggiungere il controllo lasciandoti scrivere quasi come JavaScript normale: i tipi si condensano da soli attorno al codice. Tu dichiari solo i contratti, ai bordi delle funzioni e nella forma dei dati; il resto lo riempie lui. È ciò che rende la sicurezza a buon mercato, e quindi davvero usata. Come un assistente che coglie l'intenzione e riempie i vuoti. La lezione: sopravvivono gli strumenti che chiedono poco per ciò che danno. Nella prossima puntata vediamo come rende visibile ciò che potrebbe mancare. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.