TypeScript: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: aggiungo template {{Collegamenti esterni}} (ref)
Cronologia delle versioni: Aggiunto il template "Aggiornare"
 
(31 versioni intermedie di 19 utenti non mostrate)
Riga 1:
{{S|linguaggi di programmazione}}
{{Linguaggio di programmazione
|nome = TypeScript
|immagine = TypeScript Logo.png
|didascalia =
|autore = [[Anders Hejlsberg]],<br />[[Microsoft]]
|data = 1º ottobre 2012
|versione =
|utilizzo = [[General purpose]]
|paradigmi = [[Paradigma di programmazione|Multi-paradigma]]: [[Linguaggio di scripting|scripting]], [[Programmazione orientata agli oggetti|orientato agli oggetti]], [[Programmazione strutturata|strutturata]], [[Programmazione imperativa|imperativa]]
|tipizzazione = Media
|specifiche =
|estensione =
|influenzato_da = [[JavaScript]], [[Java (linguaggio di programmazione)|Java]], [[C Sharp|C#]]
|sistema_operativo = [[Windows]], [[Linux]], [[macOS]]
|lingua = Multilingua
|licenza =
|sito_web = ĕ
}}
'''TypeScript''' è un [[linguaggio di programmazione]] [[Software libero|libero]] ed [[open source]] sviluppato da [[Microsoft]]. Si tratta di un Super-set'estensione di [[JavaScript]] che basa le sue caratteristiche su [[ECMAScript]] 6; capo del progetto è [[Anders Hejlsberg]].<ref>[{{Cita web|url=https://www.zdnet.com/article/microsoft-takes-the-wraps-off-typescript-a-superset-of-javascript-7000004993/ |titolo=Microsoft takes the wraps off TypeScript, a superset of JavaScript | ZDNet]sito=ZDNET|lingua=en}}</ref><ref>[https://blogs.msdn.com/b/somasegar/archive/2012/10/01/typescript-javascript-development-at-application-scale.aspx TypeScript: JavaScript Development at Application Scale - Somasegar's blog - Site Home - MSDN Blogs]</ref><ref>[{{Cita web|url=https://www.zdnet.com/article/microsoft-typescript-can-the-father-of-c-save-us-from-the-tyranny-of-javascript-7000005054/ |titolo=Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? | ZDNet]sito=ZDNET|lingua=en}}</ref><ref>[{{Cita web |url=http://www.cio.com/article/717679/Microsoft_Augments_Javascript_for_Large_scale_Development |titolo=Microsoft Augments Javascript for Large-scale Development CIO.com] |accesso=19 luglio 2013 |dataarchivio=17 dicembre 2013 |urlarchivio=https://web.archive.org/web/20131217223751/http://www.cio.com/article/717 |urlmorto=sì }}</ref>
 
EstendeIl linguaggio estende la [[Sintassi (informatica)|sintassi]] di JavaScript, in questo modo che qualunque [[programma (informatica)|programma]] scritto in JavaScript èsia anche in grado di funzionare con TypeScript senza nessuna modifica. È stato progettato per lo sviluppo di grandi applicazioni eed vieneè successivamentedestinato a essere [[compilazione| ricompilatocompilato]] in JavaScript per poter essere [[interprete (informatica)|interpretato]] da qualunque [[web browser]] o [[applicazione mobile|app]].<ref>[{{Cita web|url=https://arstechnica.com/information-technology/2012/10/microsoft-typescript-the-javascript-we-need-or-a-solution-looking-for-a-problem/ |titolo=Microsoft TypeScript: the JavaScript we need, or a solution looking for a problem?|autore=Ars Staff| sito=Ars Technica<!--|data=3 Bot generated titleottobre 2012|lingua=en-->]US}}</ref>
 
== Origini ==
TypeScript nasce dal crescente bisogno di un linguaggio [[front-end]] per lo sviluppo di [[applicazione (informatica)|applicazioni]] [[JavaScript]] su larga scala. Il linguaggio è natoe dalla necessità di sicurezza e robustezza, sia da parte di sviluppatori interni a Microsoft sia da parte di clienti e sviluppatori indipendenti.<ref>[http://channel9.msdn.com/Shows/Going+Deep/Anders-Hejlsberg-and-Lars-Bak-TypeScript-JavaScript-and-Dart Anders Hejlsberg and Lars Bak: TypeScript, JavaScript, and Dart]
</ref>
 
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 [[Programmazione modulare|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 [[Tipizzazione forte|fortemente tipizzati]], garantendo un ambiente di sviluppo più sicuro e affidabile.
 
== Caratteristiche ==
TypeScript è un linguaggio che estende la basestruttura esistente di JavaScript aggiungendo o rendendo più flessibili e potenti varie sue caratteristiche:
* [[Firma (programmazione)|Firma digitaledei metodi]]
* [[Classe (informatica)|Classi]]
* [[Interfaccia (informatica)|Interfacce]]
* [[Modulo (programmazione)|Moduli]]
* Operatore "<code>=>"</code> che permette di definire le fat-arrow[[funzioni functionanonime]]
* Tipi di dato (opzionali)
* Enumerazioni
* Tipo Enum
* ''Mixin'' tra classi
Da un punto di vista semantico TypeScript è molto simile a [[JScript .NET]], un'altra implementazione dello [[Norma tecnica|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;
}
 
<syntaxhighlight lang="typescript" line="1" copy=1>
Le annotazioni disponibili per i tipi primitivi sono: <code>number</code>, <code>bool</code> e <code>string</code>. Debolmente o fortemente tipizzati, le strutture sono di tipo <code>any</code> (qualunque).
function add(left: number, right: number): number {
return left + right;
}
</syntaxhighlight>
 
Le annotazioni disponibili per i tipi primitivi sono: {{Codice|codice=number|linguaggio=TypeScript}}, {{Codice|codice=boolean|linguaggio=TypeScript}} e {{Codice|codice=string|linguaggio=TypeScript}}. [[Tipizzazione debole|Debolmente]] o fortemente tipizzati, le strutture sono di tipo <code>any</code> (qualunque).
Le annotazioni di tipo possono essere esportate in un ''file di dichiarazione'' (declarations file in inglese), per dare informazioni sui tipi a script TypeScript che si avvantaggiano di librerie preesistenti come [[Node.js]] e [[jQuery]].
=== Supporto per ECMAScript 6 ===
 
Le annotazioni di tipo possono essere esportate in un file di dichiarazione ({{Inglese|declarations file}}), per dare informazioni sui tipi a script TypeScript che usano [[Libreria (software)|librerie]] di supporto come, per esempio, [[Node.js]] e [[jQuery]].
TypeScript aggiunge il supporto per le caratteristiche proposte nella prossima versione di JavaScript (Harmony) [https://web.archive.org/web/20130809152146/http://wiki.ecmascript.org/doku.php?id=harmony:proposals features proposed] presenti nello standard ECMAScript 6.
 
È possibile aggiungere annotazioni complesse all'inizializzazione di una variabile.<syntaxhighlight lang="typescript" line="1" copy=1>
I costrutti supportati sono:
public structure: { name: string, age: number, salary: number, contact: string | number } = {
name: 'Mario',
age: 42,
salary: 1300,
contact: 2+'000'
}
</syntaxhighlight>
 
=== Supporto per ECMAScript 6 ===
* Classi (con ereditarietà)
TypeScript aggiunge il supporto per le caratteristiche proposte nella versione ''Harmony'' di JavaScript<ref> {{Cita web|url=https://web.archive.org/web/20130809152146/http://wiki.ecmascript.org/doku.php?id=harmony:proposals|titolo=harmony:proposals [ES Wiki]|sito=web.archive.org|data=9 agosto 2013}}</ref> presenti nello standard [[ECMAScript 6]].
 
I costrutti supportati sono:
* [[Classe (informatica)|Classi]] (con [[Ereditarietà (informatica)|ereditarietà]])
* Moduli
* Sintassi per le arrowfunzioni function (=>)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.
Line 62 ⟶ 73:
TypeScript supporta le classi come definite nello standard ECMAScript 6, integrando il supporto per le annotazioni tipizzate.
 
<syntaxhighlight lang="typescript" line="1" copy=1>
<source lang="JavaScript">
class Person {
private name: string;
private age: number;
private salary: number;
 
constructor(private name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
Line 75 ⟶ 84:
toString(): string {
return `Name: ${this.name}, + "Age: (" + ${this.age + "})", +Salary: "("+ ${this.salary +"})"`;
}
}
</syntaxhighlight>
</source>
 
== Cronologia delle versioni ==
{{Aggiornare|argomento=informatica}}
{| class="wikitable sortable"
!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
|{{Codice|codice=protected|linguaggio=TypeScript}}, tipi di tupla
|-
|1.4
|20 gennaio 2015
|tipi unione, dichiarazioni {{Codice|codice=let|linguaggio=TypeScript}} e {{Codice|codice=const|linguaggio=TypeScript}}, stringhe di modello, tipo di guardie, di tipo alias
|-
|1.5
|20 luglio 2015
|Moduli ES6, parola chiave <code>namespace</code>, supporto {{Codice|codice=for..of|linguaggio=TypeScript}}, 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
|{{Codice|codice=async|linguaggio=TypeScript}} e {{Codice|codice=await|linguaggio=TypeScript}}
|-
|1.8
|22 febbraio 2016
|vincoli generici, errori di analisi del flusso di controllo, tipi di stringhe letterali, <code>allowJs</code>
|-
|2.0
|22 settembre 2016
|Tipi consapevoli di null e undefined, analisi del tipo basata sul flusso di controllo, tipi di unione discriminati, {{Codice|codice=async|linguaggio=TypeScript}}, parola chiave {{Codice|codice=readonly|linguaggio=TypeScript}}, {{Codice|codice=this|linguaggio=TypeScript}}
|-
|2.1
|8 novembre 2016
|<code>keyof</code> e tipi di ricerca, tipi mappati, diffusione e riposo di oggetti,
|-
|2.2
|22 febbraio 2017
|classi mix-in, <code>object</code>
|-
|2.3
|27 aprile 2017
|{{Codice|codice=async|linguaggio=TypeScript}}, 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 <code>keyof</code>
|-
|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 <code>bind</code>, <code>call</code> e <code>apply</code>
|-
|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 {{Codice|codice=readonly|linguaggio=TypeScript}} per array, asserzioni {{Codice|codice=const|linguaggio=TypeScript}}, controllo del tipo globale {{Codice|codice=this|linguaggio=TypeScript}}
|-
|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 ==
<references/>
 
== Altri progetti ==
{{interprogetto}}
 
== Collegamenti esterni ==