TypeScript

JavaScript per applicazioni scalabili

@MattiaManzati

React JS Day di Verona

Codice sconto del 10%

ItaliaJS16

JavaScript:

whats wrong?

  • Il namespace globale può essere facilmente "sporcato"
  • Le regole di coerce di "==" possono indurre in errore
  • "this" può variare a seconda del binding della funzione

JavaScript:

whats wrong?

JavaScript:

whats wrong?

JavaScript:

whats wrong?

Essendo JavaScript un linguaggio ad oggetti,

non dispone di ereditarietà a classi, ma bensì prototipale.

Questo rende più complicato

per chi viene da linguaggi come Java o C#

comprendere come organizzare le gerarchie

o come creare metodi e membri privati

JavaScript:

whats good?

E' uno dei pochi linguaggi che soddisfa appieno il modello

"write once, run everywhere"

La crescita di richieste di web application

e la crescente richiesta di rapidità di esecuzione dell'applicativo

porta JavaScript ad essere l'unica soluzione

per il web application developement

Nasce quindi l'esigenza di nuovi linguaggi che utilizzino JavaScript come linguaggio di "assembly"

Un altro linguaggio?!

TypeScript estende la sintassi JavaScript

che milioni di developer già conoscono.

Quindi un file JavaScript è anche un file TypeScript valido!

Cos'è TypeScript?

TypeScript è un superset di JavaScript,

che compila verso JavaScript,

introducendo tipizzazione opzionale,

e supporto alle ultime features di JavaScript.

Cos'è TypeScript?

  • è totalmente OpenSource
  • compila verso ES3/ES5
  • sviluppato e promosso da Microsoft
  • compilatore scritto in TypeScript
  • NodeJS come ambiente di build

Usa JavaScript di Domani, Oggi.

TypeScript permette di utilizzare alcune features ancora in fase di approvazione; traspilandole verso codice ES3/ES5.

Type System

Type System

Le annotazioni di tipo in TypeScript sono opzionali;

qualora non indicate, verrà assunto il tipo "any"

Dove possibile, la tipizzazione è inferred, ossia dedotta.

Type System

Il costo di adottare TypeScript è quindi minimo,

solitamente è sufficiente tipizzare i parametri di funzione,

TypeScript saprà dedurre da solo il resto.

Type System

Otteniamo quindi i benefici di un Type System,

quali ad esempio check della signature o type check.

Finalmente la nostra IDE ha coscienza del codice che scriviamo, e ci può aiutare!

Type System

Il Type System ci può aiutare a scovare bug nascosti!

Type System

Il Type System di TypeScript è structure-based;

il casting di una variabile verso un tipo non è necessario

Type System

il casting da un tipo a un altro è implicito;

a patto che i requisiti del tipo di destinazione siano soddisfatti!

Type System

Otteniamo inoltre i benifici di un linguaggio tipizzato:

Trova riferimenti, trova definizione e refactoring!

Type System

I programmatori Java e C# si troveranno più familiari con la programmazione ad oggetti; anche se check di accesso a membri privati viene effettuato solamente a compile time

Type System

Qualora tu non voglia, le dichiarazioni di tipo possono essere messe in un file di dichiarazione ".d.ts" e referenziate nel codice JS tramite un semplice commento.

DefinitelyTyped

Sull'onda di TypeScript, è nato in maniera indipendente e community based DefinitelyTyped, il repo con le tipizzazioni delle librerie JavaScript più famose

TypeScript Pro

  • Supporto come Language Service per le IDE (e.g. VSCode)
     
  • Possibilità di eseguire refactoring in maniera semplice e sicura
     
  • Errori di battitura individuati in fase di compilazione
     
  • Programmazione ad oggetti basata su classi, interfacce  e elementi privati
     
  • Supporto ai moduli (AMD, UMD, CommonJS)

TypeScript Pro

 

  • Compatibilità con codice JavaScript esistente
    • TypeScript compila verso JavaScript idiomatico
    • qualsiasi codice JavaScript è anche TypeScript valido
       
  • Basso rischio nel provare TypeScript
    • Si può iniziare tipizzando un codebase esistente
    • Si può tornare indietro usando il codice JS generato

TypeScript Cons

 

  • Per ottenere il massimo da TypeScript, la maggior parte del codebase deve essere tipizzato
     
  • Per poter eseguire la tua app nel browser, è necessario prima compilarla
     
  • Nonostante la flessibilità del TypeSystem, alcune funzioni (e.g. currying) sono difficili da tipizzare; all'uscita di TypeScript 2.0 quasi tutte queste situazioni verranno risolte
     
  • Le tipizzazioni DefinitelyTyped posson essere arretrate

TypeScript Sì o No?

a mio avviso, Sì.

Thanks!

@MattiaManzati

Made with Slides.com