SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Introduzione a TypeScript
Marco Assandri
info@sinergiatotale.it www.dotnettoscana.org
#jsfull
Thanks to our sponsor
Agenda
Negli anni scorsi …
Problematiche e soluzioni esistenti
TypeScript - presentazione generale
Tools
Tipizzazione
Inferenza
Classi
Funzioni
Ereditarietà
Moduli
Integrazione librerie esterne
Debug
Links
Negli anni scorsi …
ASP.NET Web-Forms (2002)
• minore importanza al Javascript grazie ai controlli del framework
• tendenza a spostare il lavoro sul server
2004-2005 inizia la moda AJAX (tecnologia già presente in IE5) con ampio utilizzo in Gmail e
Google Maps
• Microsoft rilascia controlli lato server anche per AJAX
jQuery (Agosto 2006)
• Risolve molti problemi cross-browser e fornisce un’interfaccia comune
• Semplifica la programmazione lato client
Firebug (2006 mi pare) => Developer Toolbar per Chrome e IE
• Favoriscono moltissimo lo sviluppo e il debug di JS, CSS e HTML
• Attivabili con F12
Negli anni scorsi …
HTML 5
• Ancora maggiore enfasi e strumenti per spostare il lavoro sul client
• Ecmascript 5 aggiunge nuove funzionalità a Javascript
• Possibilità di realizzare applicazioni web complesse e performanti
http://www.cuttherope.ie/
Windows RT e Node.js
• Permettono di utilizzare Javascript lato server e per scrivere applicazioni per
Windows Store
Problematiche
Javascript manca di alcune strutture a cui siamo abituati con C#
• Tipizzazione
• Interfacce
• Classi
• Namespace
Alcuni comportamenti del linguaggio sono diversi da quello che potremmo
aspettarci in quanto sviluppatori .NET (this, assegnazione variabili, funzioni che
rappresentano oggetti, closures, …)
Risulta indubbiamente complesso gestire applicazioni di grandi dimensioni.
Soluzioni tentate
Negli anni si sono sviluppate Best Practice per la strutturazione del codice Javascript che
simulano le funzionalità mancanti
• Prototype pattern
• Module pattern
• Revealing module pattern
• Revealing prototype pattern
Script #
• Permette la scrittura di codice in C# che viene compilato in Javascript
• Scarsa documentazione
• Difficoltà ad utilizzare librerie non supportate
Coffee Script
• Necessità di imparare una nuova sintassi
• È soggetto a cambiamenti di sintassi, problemi nel debugging e nella comprensione degli
errori di compilazione
TypeScript
“TypeScript is a language for application-scale JavaScript development.
TypeScript is a typed superset of JavaScript that compiles to plain
JavaScript.
Any browser. Any host. Any OS. Open Source.”
Definizione presa da http://www.typescriptlang.org/
TypeScript
• TypeScript aggiunge funzionalità a JavaScript (sostanzialmente aggiunge la
tipizzazione statica e il modello di programmazione ad oggetti class-based)
• Le funzionalità aggiuntive sono implementate seguendo le specifiche ES6
• Il codice viene compilato in JavaScript (ES3 o ES5) e il compilatore trasforma le
funzionalità aggiuntive seguendo i pattern più comuni
• Il codice risulta più pulito, leggibile, con supporto di intellisense e errori a compile
time
• possiamo prendere un codice Javascript esistente e inserirlo in un file TypeScript
(.ts) e viene riconosciuto correttamente
Tools
- Per provarlo http://www.typescriptlang.org/Playground/
- Per sviluppare seriamente
Visual Studio Update 2 (include ASP.NET and Web Tools 2012.2)
Plugin per Visual Studio 2012
http://www.microsoft.com/en-us/download/details.aspx?id=34790
Web Essentials 2012 (consigliato)
(DEMO)
- Altri (Sublime Text, EMACS, Vim, Node.js, …)
- Self hosting (typescript.js)
Tipizzazione
• Javascript è un linguaggio senza tipizzazione statica => errori rilevati a runtime
• TypeScript permette la tipizzazione tramite una sintassi opzionale il :
var a; // tipo any
var b: number; // tipo number
• => Intellisense migliorato e errori a compile time
• Possibilità di usare tipi opzionali usando ?
• (DEMO)
Type inference
• Type inference: il compilatore riesce in molti casi a dedurre il tipo di variabile
quando non viene dichiarato espressamente.
• Possibile il casting tramite <nometipo>
var par = <HTMLParagraphElement>document.getElementById('p1');
Classi
È possibile creare classi con campi, proprietà, costruttori e funzioni
class Car {
// Property (public by default)
engine: string;
// Constructor
// (accepts a value so you can initialize engine)
constructor(engine: string) {
this.engine = engine;
}
}
var hondaAccord = new Car('V6');
Funzioni
• Arrow functions => : è un modo alternativo per definire le funzioni e risolve il problema dello scope
del this
• Pianificato in ES6
var myFunc1 = function (h: number, w: number) {
return h * w;
};
può essere scritto come
var myFunc2 = (h: number, w: number) => h * w;
Le seguenti sono equivalenti
(x) => { return Math.sin(x); }
(x) => Math.sin(x)
x => { return Math.sin(x); }
x => Math.sin(x)
Funzioni
Le funzioni all’interno delle classi possono essere implementate come prototype o come istanze
class Car {
engine: string;
stop: () => string;
constructor (engine: string) {
this.engine = engine;
this.stop = () => "Stopped " + this.engine;
}
start() {
return "Started " + this.engine;
}
}
Ereditarietà
TypeScript semplifica l’ereditarietà usando extends che permette l’accesso ai membri pubblici e al costruttore. Il
costruttore può essere ridefinito e per chiamare il costruttore della classe base usiamo super
class Auto {
engine: string;
constructor(engine: string) {
this.engine = engine;
}
}
class ManlyTruck extends Auto {
bigTires: bool;
constructor(engine: string, bigTires: bool) {
super(engine);
this.bigTires = bigTires;
}
}
Interfacce
TypeScript permette di definire tipi complessi sotto forma di interfacce.
interface ICar{
engine: string;
color: string;
}
class Car implements ICar {
constructor (public engine: string, public color: string) {
}
}
var toyotaCamry : ICar;
Moduli
• I moduli in TypeScript (paragonabili ai namespace in C#) permettono una migliore
scrittura del codice favorendone il riuso, l’incapsulamento, lo separano dal global
scope ed è supportato AMD e commonJS.
• I moduli possono essere interni o esterni (utili per AMD).
Moduli interni
• I moduli interni vengono creati tramite module
• Il contenuto del modulo vive in esso ed è esterno dal global scope
• I moduli possono essere nested.
module Shapes {
class Rectangle {
constructor (
public height: number,
public width: number) {
}
}
// This works!
var rect1 = new Rectangle(10, 4);
}
// This won't!!
var rect2 = Shapes._________
Moduli interni
• Per farlo funzionare si usa export
module Shapes {
export class Rectangle {
constructor (
public height: number,
public width: number) {
}
}
}
// This works!
var rect = Shapes.Rectangle(10, 4);
Moduli interni
• I moduli possono essere estesi anche su file separati.
• È possibile referenziare moduli su file diversi usando la sintassi
/// <reference path="nomefile.ts" />
Moduli esterni
• Per facilitare la gestione delle dipendenze in progetti complessi si tende ad
utilizzare AMD e require.js. TypeScript lo supporta tramite i moduli esterni.
• Invece della keyword module si scrive direttamente ogni modulo in un file
separato e tramite import e export si mettono in relazione
Integrazione librerie
• Per utilizzare librerie esterne conviene utilizzare i definition files (estensione .d.ts)
per sfruttare al meglio la tipizzazione e l’intellisense.
• I definition files disponibili possono essere scaricati da
https://github.com/borisyankov/DefinitelyTyped
• In mancanza usare solo declare
Debugging
• Oltre a debuggare il javascript generato è possibile inserire breakpoint
direttamente in TypeScript
• Passi da seguire:
Visual Studio 2012
Abilitazione dei file di mapping su Web Essentials
Utilizzo di Internet Explorer 9 o 10
Links
•http://www.typescriptlang.org/
•http://www.johnpapa.net/typescriptpost1/
Tutto il materiale di questa sessione su
Grazie!
#jsfull
http://www.dotnettoscana.org/javascript-full-immersion.aspx

Contenu connexe

Tendances

Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Qabiria
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developerssparkfabrik
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Fabrizio Bernabei
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 

Tendances (7)

Tesi8
Tesi8Tesi8
Tesi8
 
Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.Faccio cose. Vedo gente. Localizzo siti.
Faccio cose. Vedo gente. Localizzo siti.
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
 
Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
Livecode
LivecodeLivecode
Livecode
 

En vedette

V. liqviat 2009
V. liqviat 2009V. liqviat 2009
V. liqviat 2009nera24mx
 
Introduzione a node: cenni storici ecc
Introduzione a node: cenni storici eccIntroduzione a node: cenni storici ecc
Introduzione a node: cenni storici eccLuciano Colosio
 
Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Giancarlo Valente
 
Corso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptCorso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptStudiabo
 
Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionGabriele Falasca
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e PostgresqlLucio Grenzi
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayStudiabo
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Eugenio Minardi
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoGabriele Gaggi
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Flavius-Florin Harabor
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Giuseppe Vizzari
 
Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Giuseppe Vizzari
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsClaudio Mignanti
 
Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3John Bertucci
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907NodejsFoundation
 
Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to BootstrapRon Reiter
 

En vedette (20)

V. liqviat 2009
V. liqviat 2009V. liqviat 2009
V. liqviat 2009
 
Introduzione a node: cenni storici ecc
Introduzione a node: cenni storici eccIntroduzione a node: cenni storici ecc
Introduzione a node: cenni storici ecc
 
Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?Node.js: perche' tutto questo hype?
Node.js: perche' tutto questo hype?
 
Corso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascriptCorso base di Tecnologie WEB - Primi passi in javascript
Corso base di Tecnologie WEB - Primi passi in javascript
 
Aulas linux
Aulas linuxAulas linux
Aulas linux
 
Apache Cordova: Overview and Introduction
Apache Cordova: Overview and IntroductionApache Cordova: Overview and Introduction
Apache Cordova: Overview and Introduction
 
node.js everywhere
node.js everywherenode.js everywhere
node.js everywhere
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Web base-03-js-numeri stringearray
Web base-03-js-numeri stringearrayWeb base-03-js-numeri stringearray
Web base-03-js-numeri stringearray
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?Node js: che cos'è e a che cosa serve?
Node js: che cos'è e a che cosa serve?
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)Introduzione a JavaScript e jQuery (2/2)
Introduzione a JavaScript e jQuery (2/2)
 
Roma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejsRoma linuxday 2013 - nodejs
Roma linuxday 2013 - nodejs
 
Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3Design for Developers: Introduction to Bootstrap 3
Design for Developers: Introduction to Bootstrap 3
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 
Introduction to Bootstrap
Introduction to BootstrapIntroduction to Bootstrap
Introduction to Bootstrap
 

Similaire à DotNetToscana - Sessione TypeScript

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3GWTcon
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAXTommaso Torti
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Alessandro del Gobbo
 
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance ToolsAndrea Tosato
 
Exploring VS Code
Exploring VS CodeExploring VS Code
Exploring VS Codedotnetcode
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriAlessandro Nadalin
 

Similaire à DotNetToscana - Sessione TypeScript (20)

Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
GWT vs CSS3
GWT vs CSS3GWT vs CSS3
GWT vs CSS3
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAX
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Visual Studio Performance Tools
Visual Studio Performance ToolsVisual Studio Performance Tools
Visual Studio Performance Tools
 
Exploring VS Code
Exploring VS CodeExploring VS Code
Exploring VS Code
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Excel development e sql 1.7
Excel development e sql   1.7Excel development e sql   1.7
Excel development e sql 1.7
 
Presentazione Tesi
Presentazione TesiPresentazione Tesi
Presentazione Tesi
 

DotNetToscana - Sessione TypeScript

  • 1. Introduzione a TypeScript Marco Assandri info@sinergiatotale.it www.dotnettoscana.org #jsfull
  • 2. Thanks to our sponsor
  • 3. Agenda Negli anni scorsi … Problematiche e soluzioni esistenti TypeScript - presentazione generale Tools Tipizzazione Inferenza Classi Funzioni Ereditarietà Moduli Integrazione librerie esterne Debug Links
  • 4. Negli anni scorsi … ASP.NET Web-Forms (2002) • minore importanza al Javascript grazie ai controlli del framework • tendenza a spostare il lavoro sul server 2004-2005 inizia la moda AJAX (tecnologia già presente in IE5) con ampio utilizzo in Gmail e Google Maps • Microsoft rilascia controlli lato server anche per AJAX jQuery (Agosto 2006) • Risolve molti problemi cross-browser e fornisce un’interfaccia comune • Semplifica la programmazione lato client Firebug (2006 mi pare) => Developer Toolbar per Chrome e IE • Favoriscono moltissimo lo sviluppo e il debug di JS, CSS e HTML • Attivabili con F12
  • 5. Negli anni scorsi … HTML 5 • Ancora maggiore enfasi e strumenti per spostare il lavoro sul client • Ecmascript 5 aggiunge nuove funzionalità a Javascript • Possibilità di realizzare applicazioni web complesse e performanti http://www.cuttherope.ie/ Windows RT e Node.js • Permettono di utilizzare Javascript lato server e per scrivere applicazioni per Windows Store
  • 6. Problematiche Javascript manca di alcune strutture a cui siamo abituati con C# • Tipizzazione • Interfacce • Classi • Namespace Alcuni comportamenti del linguaggio sono diversi da quello che potremmo aspettarci in quanto sviluppatori .NET (this, assegnazione variabili, funzioni che rappresentano oggetti, closures, …) Risulta indubbiamente complesso gestire applicazioni di grandi dimensioni.
  • 7. Soluzioni tentate Negli anni si sono sviluppate Best Practice per la strutturazione del codice Javascript che simulano le funzionalità mancanti • Prototype pattern • Module pattern • Revealing module pattern • Revealing prototype pattern Script # • Permette la scrittura di codice in C# che viene compilato in Javascript • Scarsa documentazione • Difficoltà ad utilizzare librerie non supportate Coffee Script • Necessità di imparare una nuova sintassi • È soggetto a cambiamenti di sintassi, problemi nel debugging e nella comprensione degli errori di compilazione
  • 8. TypeScript “TypeScript is a language for application-scale JavaScript development. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open Source.” Definizione presa da http://www.typescriptlang.org/
  • 9. TypeScript • TypeScript aggiunge funzionalità a JavaScript (sostanzialmente aggiunge la tipizzazione statica e il modello di programmazione ad oggetti class-based) • Le funzionalità aggiuntive sono implementate seguendo le specifiche ES6 • Il codice viene compilato in JavaScript (ES3 o ES5) e il compilatore trasforma le funzionalità aggiuntive seguendo i pattern più comuni • Il codice risulta più pulito, leggibile, con supporto di intellisense e errori a compile time • possiamo prendere un codice Javascript esistente e inserirlo in un file TypeScript (.ts) e viene riconosciuto correttamente
  • 10. Tools - Per provarlo http://www.typescriptlang.org/Playground/ - Per sviluppare seriamente Visual Studio Update 2 (include ASP.NET and Web Tools 2012.2) Plugin per Visual Studio 2012 http://www.microsoft.com/en-us/download/details.aspx?id=34790 Web Essentials 2012 (consigliato) (DEMO) - Altri (Sublime Text, EMACS, Vim, Node.js, …) - Self hosting (typescript.js)
  • 11. Tipizzazione • Javascript è un linguaggio senza tipizzazione statica => errori rilevati a runtime • TypeScript permette la tipizzazione tramite una sintassi opzionale il : var a; // tipo any var b: number; // tipo number • => Intellisense migliorato e errori a compile time • Possibilità di usare tipi opzionali usando ? • (DEMO)
  • 12. Type inference • Type inference: il compilatore riesce in molti casi a dedurre il tipo di variabile quando non viene dichiarato espressamente. • Possibile il casting tramite <nometipo> var par = <HTMLParagraphElement>document.getElementById('p1');
  • 13. Classi È possibile creare classi con campi, proprietà, costruttori e funzioni class Car { // Property (public by default) engine: string; // Constructor // (accepts a value so you can initialize engine) constructor(engine: string) { this.engine = engine; } } var hondaAccord = new Car('V6');
  • 14. Funzioni • Arrow functions => : è un modo alternativo per definire le funzioni e risolve il problema dello scope del this • Pianificato in ES6 var myFunc1 = function (h: number, w: number) { return h * w; }; può essere scritto come var myFunc2 = (h: number, w: number) => h * w; Le seguenti sono equivalenti (x) => { return Math.sin(x); } (x) => Math.sin(x) x => { return Math.sin(x); } x => Math.sin(x)
  • 15. Funzioni Le funzioni all’interno delle classi possono essere implementate come prototype o come istanze class Car { engine: string; stop: () => string; constructor (engine: string) { this.engine = engine; this.stop = () => "Stopped " + this.engine; } start() { return "Started " + this.engine; } }
  • 16. Ereditarietà TypeScript semplifica l’ereditarietà usando extends che permette l’accesso ai membri pubblici e al costruttore. Il costruttore può essere ridefinito e per chiamare il costruttore della classe base usiamo super class Auto { engine: string; constructor(engine: string) { this.engine = engine; } } class ManlyTruck extends Auto { bigTires: bool; constructor(engine: string, bigTires: bool) { super(engine); this.bigTires = bigTires; } }
  • 17. Interfacce TypeScript permette di definire tipi complessi sotto forma di interfacce. interface ICar{ engine: string; color: string; } class Car implements ICar { constructor (public engine: string, public color: string) { } } var toyotaCamry : ICar;
  • 18. Moduli • I moduli in TypeScript (paragonabili ai namespace in C#) permettono una migliore scrittura del codice favorendone il riuso, l’incapsulamento, lo separano dal global scope ed è supportato AMD e commonJS. • I moduli possono essere interni o esterni (utili per AMD).
  • 19. Moduli interni • I moduli interni vengono creati tramite module • Il contenuto del modulo vive in esso ed è esterno dal global scope • I moduli possono essere nested. module Shapes { class Rectangle { constructor ( public height: number, public width: number) { } } // This works! var rect1 = new Rectangle(10, 4); } // This won't!! var rect2 = Shapes._________
  • 20. Moduli interni • Per farlo funzionare si usa export module Shapes { export class Rectangle { constructor ( public height: number, public width: number) { } } } // This works! var rect = Shapes.Rectangle(10, 4);
  • 21. Moduli interni • I moduli possono essere estesi anche su file separati. • È possibile referenziare moduli su file diversi usando la sintassi /// <reference path="nomefile.ts" />
  • 22. Moduli esterni • Per facilitare la gestione delle dipendenze in progetti complessi si tende ad utilizzare AMD e require.js. TypeScript lo supporta tramite i moduli esterni. • Invece della keyword module si scrive direttamente ogni modulo in un file separato e tramite import e export si mettono in relazione
  • 23. Integrazione librerie • Per utilizzare librerie esterne conviene utilizzare i definition files (estensione .d.ts) per sfruttare al meglio la tipizzazione e l’intellisense. • I definition files disponibili possono essere scaricati da https://github.com/borisyankov/DefinitelyTyped • In mancanza usare solo declare
  • 24. Debugging • Oltre a debuggare il javascript generato è possibile inserire breakpoint direttamente in TypeScript • Passi da seguire: Visual Studio 2012 Abilitazione dei file di mapping su Web Essentials Utilizzo di Internet Explorer 9 o 10
  • 26. Tutto il materiale di questa sessione su Grazie! #jsfull http://www.dotnettoscana.org/javascript-full-immersion.aspx