Ciao, e benvenuto nella settima puntata della quarantaseiesima stagione. Oggi affrontiamo una delle cose più interessanti e oneste di TypeScript, una che merita una puntata tutta sua. Parte da una domanda scomoda: puoi fidarti dei tipi al cento per cento? Se TypeScript dice che una cosa è un numero, è garantito che sarà un numero quando il codice gira? La risposta, sorprendente e onesta, è: non sempre. E, cosa ancora più strana, apposta. Oggi capiamo perché TypeScript a volte mente di proposito.
Partiamo dal concetto di garanzia, perché è il cuore di tutto. In gergo, un sistema di tipi si dice a tenuta stagna quando non mente mai: quando può garantire che ciò che afferma mentre scrivi sarà vero anche mentre gira, sempre, senza eccezioni. Dice numero, e sarà un numero, punto, promesso. È una proprietà bellissima, in teoria: una fiducia totale nel cartello. Ecco: TypeScript, di proposito, non è del tutto a tenuta stagna. In certi punti, lascia consapevolmente passare cose che potrebbero rivelarsi sbagliate quando il codice gira. Lo sceglie. Sa di quei buchi, e li tiene aperti.
Voglio farti capire perché mai uno strumento di sicurezza scelga di sbagliare, perché ha una ragione forte. Perché diamine uno strumento pensato per proteggerti dovrebbe scegliere di essere ogni tanto in errore? Perché l'alternativa sarebbe peggiore, per il suo scopo. Per essere perfettamente a tenuta stagna descrivendo un linguaggio morbido e dinamico come JavaScript, TypeScript dovrebbe diventare così rigido, così sospettoso, così pieno di cerimonie e di no, da risultare doloroso da usare. E uno strumento doloroso non lo usa nessuno: verrebbe abbandonato, e ti proteggerebbe zero. La perfezione lo renderebbe invivibile, e quindi inutile.
Voglio darti il patto che hanno scelto, perché è maturo. I progettisti hanno fatto una scelta deliberata e adulta: essere utile e prendere la stragrande maggioranza dei bug veri, invece di essere infallibile e prenderli tutti al prezzo di diventare insopportabile. Pragmatismo contro purezza. Meglio uno strumento che cattura il novantanove per cento degli sbagli e che la gente usa davvero, che uno che li catturerebbe tutti e che nessuno accende. Per questo TypeScript si descrive come un sistema di tipi pragmatico, non come una dimostrazione matematica. Non promette la verità assoluta: promette un aiuto enorme e vivibile.
Voglio darti la conseguenza pratica per te, perché cambia come lo usi. Cosa significa, per chi lavora? Significa che non puoi trattare il segno di spunta verde come una prova. È un ottimo sistema di allarme, non una garanzia. Cattura la gran parte degli errori, non tutti, ed è onesto su questo. Sapere dove può mentire, i buchi lasciati apposta, e sapere che comunque i tipi svaniscono quando arrivano dati dal mondo esterno, come dicemmo, è parte del saperlo usare bene. Il verde vuol dire probabilmente a posto, non certamente a posto. È un'enorme differenza, e confonderle è pericoloso.
Voglio darti l'immagine che rende chiara questa idea, perché la vedi ovunque. Pensa a un rilevatore di fumo, contro una dimostrazione matematica che l'incendio è impossibile. La dimostrazione sarebbe perfetta, ma richiederebbe di costruire una casa in cui non potresti viverci. Il rilevatore di fumo non è perfetto: ogni tanto manca qualcosa, ogni tanto suona a vuoto. Ma è economico, discreto, e prende quasi ogni incendio vero. Ed è proprio questo baratto, imperfetto ma vivibile, il motivo per cui ogni casa ha un rilevatore di fumo e nessuna ha la dimostrazione. L'utile abitabile batte il perfetto invivibile.
Voglio trarre la lezione generale, perché è profonda e torna spesso. La perfezione e l'utilità sono spesso in guerra, e la scelta matura, per uno strumento del mondo reale, è quasi sempre l'utile. Un sistema che prende la gran parte dei problemi e resta vivibile batte uno che li prende tutti e non si può sopportare. E c'è di più: uno strumento onesto sui propri limiti è più affidabile di uno che si proclama perfetto. Perché il primo ti dice dove stare attento; il secondo ti culla in una falsa sicurezza, che è più pericolosa di nessuna sicurezza. Fidarsi di chi ammette i propri buchi è più saggio che fidarsi di chi giura di non averne.
Per oggi ci fermiamo qui. Abbiamo capito una delle cose più oneste di TypeScript: a volte mente apposta. Un sistema di tipi a tenuta stagna non mente mai, garantisce; TypeScript, di proposito, non lo è del tutto, e lascia passare consapevolmente qualcosa. Perché? Perché essere perfetto descrivendo il morbido JavaScript lo renderebbe rigido, doloroso, e quindi abbandonato e inutile. Hanno scelto il patto maturo: utile e quasi completo, invece di infallibile e insopportabile. Per te significa: il verde è un allarme, non una prova; probabilmente a posto, non certamente. Come un rilevatore di fumo, non una dimostrazione: imperfetto ma vivibile, ed è per questo che tutti ce l'hanno. La lezione: l'utile abitabile batte il perfetto invivibile, e chi ammette i suoi limiti è più affidabile. Nella prossima puntata scopriamo un linguaggio dentro il linguaggio: i tipi che calcolano. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.