TypeScript
| TypeScript linguaggio di programmazione | |
|---|---|
|  | |
| Autore | Anders Hejlsberg, Microsoft | 
| Data di origine | 1º ottobre 2012 | 
| Ultima versione | 5.9 (1º agosto 2025) | 
| Utilizzo | General purpose | 
| Paradigmi | Multi-paradigma: scripting, orientato agli oggetti, strutturata, imperativa | 
| Tipizzazione | Media | 
| Estensioni comuni | ts e tsx | 
| Influenzato da | JavaScript, Java, C# | 
| Implementazione di riferimento | |
| Sistema operativo | Windows, Linux, macOS | 
| Lingua | Multilingua | 
| Licenza | licenza Apache 2.0 | 
| Sito web | www.typescriptlang.org/ | 
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.[1][2][3][4]
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.[5]
Origini
[modifica | modifica wikitesto]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.[6]
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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]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: number, boolean e string. Debolmente o fortemente tipizzati, le strutture sono di tipo any (qualunque).
Le annotazioni di tipo possono essere esportate in un file di dichiarazione (in inglese declarations file), 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
[modifica | modifica wikitesto]TypeScript aggiunge il supporto per le caratteristiche proposte nella versione Harmony di JavaScript[7] 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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]| Numero della versione | Data di pubblicazione | Cambiamenti significativi | 
|---|---|---|
| 0.8 | 1 ottobre 2012 | |
| 0.9 | 18 giugno 2013 | |
| 1.0 | 12 aprile 2014 | |
| 1.1 | 6 ottobre 2014 | miglioramenti delle prestazioni | 
| 1.3 | 12 novembre 2014 | protected, tipi di tupla | 
| 1.4 | 20 gennaio 2015 | tipi unione, dichiarazioni leteconst, stringhe di modello, tipo di guardie, di tipo alias | 
| 1.5 | 20 luglio 2015 | Moduli ES6, parola chiave namespace, supportofor..of, decoratori | 
| 1.6 | 16 settembre 2015 | Supporto JSX, tipi di intersezione, dichiarazioni di tipo locale, classi e metodi astratti, funzioni di protezione dei tipi definite dall'utente | 
| 1.7 | 30 novembre 2015 | asynceawait | 
| 1.8 | 22 febbraio 2016 | vincoli generici, errori di analisi del flusso di controllo, tipi di stringhe letterali, allowJs | 
| 2.0 | 22 settembre 2016 | Tipi consapevoli di null e undefined, analisi del tipo basata sul flusso di controllo, tipi di unione discriminati, async, parola chiavereadonly,this | 
| 2.1 | 8 novembre 2016 | keyofe tipi di ricerca, tipi mappati, diffusione e riposo di oggetti, | 
| 2.2 | 22 febbraio 2017 | classi mix-in, object | 
| 2.3 | 27 aprile 2017 | async, valori predefiniti dei parametri generici, opzione rigorosa | 
| 2.4 | 27 giugno 2017 | espressioni di importazione dinamica, enumerazioni di stringhe, inferenza migliorata per i generici, controvarianza rigorosa per i parametri di callback | 
| 2.5 | 31 agosto 2017 | variabili della clausola catch opzionali | 
| 2.6 | 31 ottobre 2017 | tipi di funzioni rigorose | 
| 2.7 | 31 gennaio 2018 | proprietà con nome costante, tuple di lunghezza fissa | 
| 2.8 | 27 marzo 2018 | tipi condizionali, migliorati con i tipi di intersezione keyof | 
| 2.9 | 14 maggio 2018 | supporto per simboli e letterali numerici nei tipi di oggetti keyof e mappati | 
| 3.0 | 30 luglio 2018 | riferimenti al progetto, estrazione e diffusione di elenchi di parametri con tuple | 
| 3.1 | 27 settembre 2018 | tipi di tupla e array mappabili | 
| 3.2 | 30 novembre 2018 | controlli più severi per bind,calleapply | 
| 3.3 | 31 gennaio 2019 | regole rilassate sui metodi dei tipi di unione, build incrementali per i progetti compositi | 
| 3.4 | 29 marzo 2019 | build incrementali più veloci, inferenza del tipo da funzioni generiche, modificatore readonlyper array, asserzioniconst, controllo del tipo globalethis | 
| 3.5 | 29 maggio 2019 | build incrementali più veloci, omissione del tipo di supporto, controlli delle proprietà in eccesso migliorati nei tipi di unione, controllo del tipo di unione più intelligente | 
| 3.6 | 28 agosto 2019 | Generatori più rigidi, diffusione dell'array più accurata, migliore supporto Unicode per gli identificatori | 
| 3.7 | 5 novembre 2019 | Concatenamento opzionale, coalescenza nullo | 
| 3.8 | 20 febbraio 2020 | Importazioni ed esportazioni di solo tipo, campi privati ECMAScript, attesa di primo livello | 
| 3.9 | 12 maggio 2020 | Miglioramenti nell'inferenza, miglioramenti della velocità | 
| 4.0 | 20 agosto 2020 | Tipi di tupla variabili, elementi di tupla etichettati | 
| 4.1 | 19 novembre 2020 | Tipi letterali modello, rimappatura chiave nei tipi mappati, tipi condizionali ricorsivi | 
| 4.3 | 12 maggio 2021 | Tipi di scrittura separati sulle proprietà, miglioramenti al tipo stringa | 
| 4.4 beta | 1 luglio 2021 | Analisi del flusso di controllo delle condizioni con alias | 
| 4.4 | 26 agosto 2021 | Default tipo unknown per il catch degli errori. Tipi unione resi esattamente come scritti. Blocchi statici all'interno delle classi. | 
Note
[modifica | modifica wikitesto]- ^ (EN) Microsoft takes the wraps off TypeScript, a superset of JavaScript, su ZDNET.
- ^ TypeScript: JavaScript Development at Application Scale - Somasegar's blog - Site Home - MSDN Blogs
- ^ (EN) Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?, su ZDNET.
- ^ Microsoft Augments Javascript for Large-scale Development CIO.com, su cio.com. URL consultato il 19 luglio 2013 (archiviato dall'url originale il 17 dicembre 2013).
- ^ (EN) Ars Staff, Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem?, su Ars Technica, 3 ottobre 2012.
- ^ Anders Hejlsberg and Lars Bak: TypeScript, JavaScript, and Dart
- ^ harmony:proposals [ES Wiki], su wiki.ecmascript.org. URL consultato il 16 aprile 2018 (archiviato dall'url originale il 9 agosto 2013).
Altri progetti
[modifica | modifica wikitesto] Wikimedia Commons contiene immagini o altri file su TypeScript Wikimedia Commons contiene immagini o altri file su TypeScript
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Sito ufficiale, su typescriptlang.org.
- (EN) Blog ufficiale, su devblogs.microsoft.com.
- (EN) Opere riguardanti TypeScript, su Open Library, Internet Archive.
- Repository sorgenti di TypeScript, su github.com.
| Controllo di autorità | LCCN (EN) sh2013001822 · J9U (EN, HE) 987007570557905171 | 
|---|
 
	

