Il problema del JavaScript su larga scala
JavaScript è nato come linguaggio di scripting per pagine web, ma nel 2012 il suo ruolo è cambiato radicalmente. Con Node.js lato server e applicazioni web sempre più complesse lato client, i codebase JavaScript crescono fino a centinaia di migliaia di righe. A queste dimensioni, l’assenza di un sistema di tipi diventa un ostacolo concreto: errori che un compilatore catturerebbe immediatamente — un nome di proprietà sbagliato, un parametro mancante, un tipo incompatibile — emergono solo a runtime, spesso in produzione.
Anders Hejlsberg, creatore di Turbo Pascal, Delphi e C#, progetta TypeScript in Microsoft con un obiettivo preciso: aggiungere un sistema di tipi a JavaScript senza rompere la compatibilità con l’ecosistema esistente.
Un superset, non un linguaggio nuovo
TypeScript è un superset di JavaScript: ogni programma JavaScript valido è anche un programma TypeScript valido. Questo significa che l’adozione può essere graduale — si può rinominare un file .js in .ts e iniziare ad aggiungere annotazioni di tipo dove servono, senza riscrivere il codice esistente.
Il compilatore tsc trasforma il codice TypeScript in JavaScript standard, compatibile con qualsiasi browser o runtime. Le annotazioni di tipo vengono rimosse durante la compilazione: il codice prodotto è JavaScript puro, senza overhead a runtime. La verifica dei tipi avviene interamente in fase di compilazione.
Il sistema di tipi
TypeScript introduce interfacce per descrivere la forma degli oggetti, enum per definire insiemi di costanti con nome, e generics per scrivere codice riutilizzabile che mantiene la sicurezza dei tipi. La type inference deduce automaticamente il tipo di una variabile dal suo valore iniziale, riducendo la quantità di annotazioni esplicite necessarie.
I tipi possono essere opzionali: il parametro any disattiva il controllo dei tipi su un valore specifico, permettendo una migrazione progressiva. Le declaration file (.d.ts) descrivono i tipi delle librerie JavaScript esistenti, consentendo a TypeScript di verificare il codice che le utilizza senza richiedere che le librerie stesse siano riscritte.
Strumenti di sviluppo
Il vero vantaggio quotidiano di TypeScript è l’esperienza di sviluppo. Il sistema di tipi alimenta il completamento automatico negli editor, la navigazione del codice (vai alla definizione, trova i riferimenti), il refactoring sicuro (rinominare una proprietà aggiorna tutti i punti di utilizzo) e la segnalazione di errori in tempo reale. Per i team che gestiscono applicazioni JavaScript di grandi dimensioni, TypeScript trasforma la manutenzione del codice da esercizio rischioso a processo strutturato e verificabile.
Link: typescriptlang.org
