TypeScript è un linguaggio di programmazione open source sviluppato da Microsoft. Si tratta di un'estensione di JavaScript che basa le sue caratteristiche su ECMAScript 6; capo del progetto è Anders Hejlsberg.

Il linguaggio estende la sintassi di JavaScript in modo che qualunque programma scritto in JavaScript sia anche in grado di funzionare con TypeScript senza nessuna modifica. È stato progettato per lo sviluppo di grandi applicazioni ed è destinato a essere compilato in JavaScript per poter essere interpretato da qualunque web browser o app.

Origini TypeScript nasce dal crescente bisogno di un linguaggio front-end per lo sviluppo di applicazioni JavaScript su larga scala e dalla necessità di sicurezza e robustezza, sia da parte di sviluppatori interni a Microsoft sia da parte di clienti e sviluppatori indipendenti.

Con l'aumento della complessità e delle dimensioni dei progetti web, JavaScript ha iniziato a mostrare limiti intrinseci in termini di scalabilità, sicurezza e manutenibilità del codice. Queste problematiche erano sentite sia dai team di sviluppo interni di Microsoft sia dalla comunità virtuale di sviluppatori esterni e clienti che richiedevano strumenti più solidi.

La mancanza di funzionalità avanzate, come il controllo statico dei tipi, la gestione degli errori e la modularizzazione, rendeva difficoltoso il mantenimento e l'evoluzione dei grandi codebase JavaScript.

TypeScript è stato concepito per colmare questa lacuna, offrendo un superset di JavaScript che introduce caratteristiche tipiche dei linguaggi di programmazione fortemente tipizzati, garantendo un ambiente di sviluppo più sicuro e affidabile.

Caratteristiche TypeScript è un linguaggio che estende la struttura esistente di JavaScript aggiungendo o rendendo più flessibili e potenti varie sue caratteristiche: Firma dei metodi Classi Interfacce Moduli Operatore => che permette di definire le funzioni anonime Tipi di dato (opzionali) Enumerazioni Mixin tra classi Da un punto di vista semantico TypeScript è molto simile a JScript .NET, un'altra implementazione dello standard ECMA-262 di Microsoft.

Annotazione tipizzata TypeScript prevede un sistema di annotazione dei tipi, che consente di controllare i tipi durante la fase di compilazione. Questa caratteristica può essere ignorata se si vuole utilizzare la classica tipizzazione dinamica di JavaScript.

function add(left: number, right: number): number { return left + right; }

Le annotazioni disponibili per i tipi primitivi sono: , e . Debolmente o fortemente tipizzati, le strutture sono di tipo any (qualunque).

Le annotazioni di tipo possono essere esportate in un file di dichiarazione (), per dare informazioni sui tipi a script TypeScript che usano librerie di supporto come, per esempio, Node.js e jQuery.

È possibile aggiungere annotazioni complesse all'inizializzazione di una variabile.public structure: { name: string, age: number, salary: number, contact: string | number } = { name: 'Mario', age: 42, salary: 1300, contact: 2+'000' }

Supporto per ECMAScript 6 TypeScript aggiunge il supporto per le caratteristiche proposte nella versione Harmony di JavaScript presenti nello standard ECMAScript 6.

I costrutti supportati sono: Classi (con ereditarietà) Moduli Sintassi per le funzioni anonime

Ancora prima che lo standard venisse definito appieno, Microsoft aveva dichiarato di voler continuare a sviluppare le caratteristiche di TypeScript mantenendole allineate con lo standard proposto.

Classi TypeScript supporta le classi come definite nello standard ECMAScript 6, integrando il supporto per le annotazioni tipizzate.

class Person { private age: number; private salary: number;

constructor(private name: string, age: number, salary: number) { this.age = age; this.salary = salary;

toString(): string { return `Name: ${this.name}, Age: (${this.age}), Salary: (${this.salary})`;

Cronologia delle versioni

Numero della versioneData di pubblicazioneCambiamenti significativi0.81 ottobre 20120.918 giugno 20131.012 aprile 20141.16 ottobre 2014miglioramenti delle prestazioni1.312 novembre 2014, tipi di tupla1.420 gennaio 2015tipi unione, dichiarazioni e , stringhe di modello, tipo di guardie, di tipo alias1.520 luglio 2015Moduli ES6, parola chiave namespace, supporto , decoratori1.616 settembre 2015Supporto JSX, tipi di intersezione, dichiarazioni di tipo locale, classi e metodi astratti, funzioni di protezione dei tipi definite dall'utente1.730 novembre 2015 e 1.822 febbraio 2016vincoli generici, errori di analisi del flusso di controllo, tipi di stringhe letterali, allowJs2.022 settembre 2016Tipi consapevoli di null e undefined, analisi del tipo basata sul flusso di controllo, tipi di unione discriminati, , parola chiave , 2.18 novembre 2016keyof e tipi di ricerca, tipi mappati, diffusione e riposo di oggetti,2.222 febbraio 2017classi mix-in, object2.327 aprile 2017, valori predefiniti dei parametri generici, opzione rigorosa2.427 giugno 2017espressioni di importazione dinamica, enumerazioni di stringhe, inferenza migliorata per i generici, controvarianza rigorosa per i parametri di callback2.531 agosto 2017variabili della clausola catch opzionali2.631 ottobre 2017tipi di funzioni rigorose2.731 gennaio 2018proprietà con nome costante, tuple di lunghezza fissa2.827 marzo 2018tipi condizionali, migliorati con i tipi di intersezione keyof2.914 maggio 2018supporto per simboli e letterali numerici nei tipi di oggetti keyof e mappati3.030 luglio 2018riferimenti al progetto, estrazione e diffusione di elenchi di parametri con tuple3.127 settembre 2018tipi di tupla e array mappabili3.230 novembre 2018controlli più severi per bind, call e apply3.331 gennaio 2019regole rilassate sui metodi dei tipi di unione, build incrementali per i progetti compositi3.429 marzo 2019build incrementali più veloci, inferenza del tipo da funzioni generiche, modificatore per array, asserzioni , controllo del tipo globale 3.529 maggio 2019build incrementali più veloci, omissione del tipo di supporto, controlli delle proprietà in eccesso migliorati nei tipi di unione, controllo del tipo di unione più intelligente3.628 agosto 2019Generatori più rigidi, diffusione dell'array più accurata, migliore supporto Unicode per gli identificatori3.75 novembre 2019Concatenamento opzionale, coalescenza nullo3.820 febbraio 2020Importazioni ed esportazioni di solo tipo, campi privati ECMAScript, attesa di primo livello3.912 maggio 2020Miglioramenti nell'inferenza, miglioramenti della velocità4.020 agosto 2020Tipi di tupla variabili, elementi di tupla etichettati4.119 novembre 2020Tipi letterali modello, rimappatura chiave nei tipi mappati, tipi condizionali ricorsivi4.312 maggio 2021Tipi di scrittura separati sulle proprietà, miglioramenti al tipo stringa4.4 beta1 luglio 2021Analisi del flusso di controllo delle condizioni con alias4.426 agosto 2021Default tipo unknown per il catch degli errori. Tipi unione resi esattamente come scritti. Blocchi statici all'interno delle classi.

Note

Altri progetti

Collegamenti esterni

Categoria:Linguaggi di programmazione multi-paradigma Categoria:Software libero Categoria:Linguaggi di scripting Categoria:Linguaggi di programmazione orientati agli oggetti Categoria:Linguaggi di programmazione strutturati Categoria:Linguaggi di programmazione imperativi