SlideShare a Scribd company logo
1 of 81
Download to read offline
Angular 4
ES6 & TypeScript
in collaborazione conES6 & TypeScript
COS'È TYPESCRIPT?
2
in collaborazione conES6 & TypeScript
TypeScript è un super-set di
JavaScript, OpenSource, realizzato e
mantenuto da Microsoft.
Estende la sintassi di JavaScript,
rendendo la sua adozione più
immediata e veloce.
3
in collaborazione conES6 & TypeScript
PERCHÉ TYPESCRIPT?
4
in collaborazione conES6 & TypeScript
✴TypeScript è stato ideato per realizzare Web Applications su larga
scala, in modo da rendere più facile il mantenimento del codice;
✴La pre-compilazione e i costrutti introdotti da TypeScript rendono il
codice più espressivo, riducendo il numero degli errori in fase di
stesura;
✴Permette già da subito di utilizzare buona parte delle novità
introdotte con ES6 senza sacrificare il supporto a browser più
datati.
5
in collaborazione conES6 & TypeScript
✴TypeScript è completamente slegato da Angular. Anche se è
possibile scrivere un'applicazione Angular utilizzando JavaScript, il
framework stesso è scritto in TypeScript. Inoltre, la complessità di
Angular rende TypeScript una tecnologia quasi necessaria.
✴Essendo slegato da qualsiasi contesto, è possibile utilizzare
TypeScript per qualsiasi progetto JavaScript (e consiglio di farlo).
6
in collaborazione conES6 & TypeScript
PRINCIPALI VANTAGGI
7
in collaborazione conES6 & TypeScript
✴TypeScript previene gli errori a compile-time;
✴Introducendo i tipi, permette di avere più controllo, rendendo il
codice autoesplicativo e mantenibile prevenendo, di nuovo, gli
errori;
✴Tutto il codice ES6 può venir convertito in codice ES5 al momento
della compilazione in modo trasparente e sicuro.
8
in collaborazione conES6 & TypeScript
this
class
let
const
() => { }
map
forEach
(a = 10) { }
[…params]
`Awesome string ${interpolation}`{ x, y }
export
import
extends
Symbol
Typed Arrays
Promise
ES6
(…b) { }
9
1.
LISTA DELLA SPESA
in collaborazione conES6 & TypeScript 10
in collaborazione conES6 & TypeScript
WebStorm
https://www.jetbrains.com/webstorm/
11
in collaborazione conES6 & TypeScript
Visual Studio

Code
https://code.visualstudio.com/
12
...consiglio però vivamente WebStorm!!!
Introduzione ad ES6
Le principali novità
in collaborazione conES6 & TypeScript
Molte delle novità introdotte con ES6
sono delle shortcuts rispetto ad ES5,
andando a semplificare il lavoro degli
sviluppatori.
Per maggiori informazioni

http://es6-features.org/
14
1.
VARIABILI
in collaborazione conES6 & TypeScript 15
in collaborazione conES6 & TypeScript
Assieme a var, è stata creata let,
variabile di tipo block-scoped.
16
var a = 1;
var b = 2;
if(a > b){
let c = 3;
}
console.log(c);
// ReferenceError
in collaborazione conES6 & TypeScript
È stato introdotto anche l'uso delle
costanti con const
17
const PI = 3.14;
console.log(PI);
// 3.14
PI = 2;
// invalid assignment to const 'PI'
2.
FUNZIONI
in collaborazione conES6 & TypeScript 18
in collaborazione conES6 & TypeScript
Vengono introdotte le Arrow Functions, un modo per definire
una funzione in modo più semplice.
Grazie a questo costrutto viene anche risolto il problema di this
all'interno degli oggetti.
19
in collaborazione conES6 & TypeScript 20
var log = function(msg) {
console.log(msg);
}
var log = msg => console.log(msg);
in collaborazione conES6 & TypeScript 21
var c = {
name: 'Pippo',
greet: function(){
var setName = (newName) => this.name = newName;
setName('Pluto');
}
}
in collaborazione conES6 & TypeScript
Grazie ai default parameters, è possibile valorizzare un parametro
in ingresso di una funzione senza la necessità di definirlo al
momento dell'utilizzo della funzione stessa.
22
in collaborazione conES6 & TypeScript 23
var log = function(msg = 'This is a message') {
console.log(msg);
}
log();
in collaborazione conES6 & TypeScript
È possibile passare n parametri in ingresso ad una funzione
grazie allo spread operator.
24
in collaborazione conES6 & TypeScript 25
var log = function(msg, ...other) {
const otherString = other.join(' ');
console.log(msg + ' ' + otherString);
}
log('This is a message', 'a', 'b', 3);
3.
STRINGHE
in collaborazione conES6 & TypeScript 26
in collaborazione conES6 & TypeScript
Grazie a string interpolation, è possibile formattare una stringa,
senza ricorrere alla concatenazione classica, utilizzando il
simbolo `` (back-tick).
Vengono mantenuti anche spazi, tabulazioni e a capo.
27
in collaborazione conES6 & TypeScript 28
let a = 'This is';
let b = 'a message.';
console.log(`${a} ${b}`);
let a = 'This is';
let b = 'a message.';
console.log(`
${a}
${b}
`);
4.
ARRAY
in collaborazione conES6 & TypeScript 29
in collaborazione conES6 & TypeScript
È possibile concatenare più array grazie allo spread operator.
30
in collaborazione conES6 & TypeScript 31
let a = [1, 2, 3];
let b = [4, 5, 6];
console.log([...a, ...b]);
console.log([...b, ...a]);
in collaborazione conES6 & TypeScript
Grazie al destructuring è possibile mappare, valore per valore, gli
elementi di un array*.
32
* utilizzabile anche su oggetti.
in collaborazione conES6 & TypeScript 33
const a = ['Pippo', 'Pluto'];
let [firstname, lastname] = a;
console.log(firstname);
console.log(lastname);
in collaborazione conES6 & TypeScript 34
const a = ['Pippo', 'Pluto', 'Paperino'];
let [firstname, , lastname] = a;
console.log(firstname);
console.log(lastname);
5.
CLASSI
in collaborazione conES6 & TypeScript 35
in collaborazione conES6 & TypeScript
Le classi in ES6 rappresentano un modo veloce per utilizzare le
funzioni come function constructor.
36
in collaborazione conES6 & TypeScript 37
class Person = {
constructor(firstName, lastName){
this.firstName = firstName;
this.lastName = lastName;
}
sayHi(){
return `Hi ${this.firstName}`;
}
}
var pippo = new Person(‘Pippo’, ‘Pluto’);
console.log(pippo.sayHi());
in collaborazione conES6 & TypeScript 38
var Person = (function () {
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.sayHi = function () {
return "Hi " + this.firstname + "!";
};
return Person;
}());
var pippo = new Person(‘Pippo’, ‘Pluto’);
console.log(pippo.sayHi());
in collaborazione conES6 & TypeScript
Per avere maggiore controllo sulle proprietà della classe, è
possibile implementare getter e setter.
39
in collaborazione conES6 & TypeScript 40
class Person = {
constructor(firstName, lastName){
this._firstname = firstname;
}
get firstname() {
return this._firstname;
}
set firstname(value) {
if (this._firstname.length === 0) {
this._firstname = value;
} else {
console.log('You cannot change the name!');
}
}
}
var pippo = new Person(‘Pippo’, ‘Pluto’);
console.log(pippo.firstname);
pippo.firstname = 'Paperino';
in collaborazione conES6 & TypeScript
È possibile estendere le classi (principio di ereditarietà).
41
in collaborazione conES6 & TypeScript 42
class BaseLog {
constructor(){
this._logName = 'Log 1';
}
log(msg){
console.log(msg);
}
}
class Logger extends BaseLog {
constructor(logName){
super(logName);
}
writeLine(msg){
super.log(`${msg}rn#`);
}
}
var logger = new Logger(‘Test’);
logger.log('This is a log');
logger.writeLine('This is another log');
6.
MODULES
in collaborazione conES6 & TypeScript 43
in collaborazione conES6 & TypeScript
Con ES6 è stata aggiunta la possibilità di creare dei moduli da
poter esportare ed importare a seconda delle esigenze.
Allo stato attuale, per poter utilizzare questa feature è necessario
un module loader come CommonJS o AMD.
Grazie ad Angular CLI (e Webpack), questa feature è già attiva e
funzionante in un nuovo progetto Angular.
44
in collaborazione conES6 & TypeScript 45
// customer.js
export let name = 'James';
export let city = 'Chandler';
// main.js
import { name, city } from './customer';
console.log(name);
console.log(city);
// main2.js
import * as customer from './customer';
console.log(customer.name);
console.log(customer.city);
7.
MAPS &
SETS
in collaborazione conES6 & TypeScript 46
in collaborazione conES6 & TypeScript
Con Map e Set è possibile collezionare e salvare dei dati.
Map può salvare una collezione di coppie chiave/valore (la chiave
deve essere univoca).
47
in collaborazione conES6 & TypeScript 48
const map = new Map();
// set items
map.set('Pippo', 'Pluto');
map.set('One', 'Item');
// duplicate index, ignored
map.set('Pippo', 'Pluto');
// get size of map
console.log(map.size);
// get an item
console.log(map.get('Pippo'));
// check if item exists
console.log(map.has('Pippo'));
// delete an item
map.delete('One');
// clear list
map.clear();
in collaborazione conES6 & TypeScript
Set può salvare una collezione di valori (il valore deve essere
univoco).
49
in collaborazione conES6 & TypeScript 50
const set = new Set();
// add items
set.add('Pippo');
set.add('Pluto');
// duplicate value, ignored
set.add('Pippo');
// get size of set
console.log(set.size);
// check if item exists
console.log(set.has('Pippo'));
// delete an item
set.delete('Pluto');
// clear list
set.clear();
TypeScript
Utilizzare ES6 potenziato
in collaborazione conES6 & TypeScript
Tutte le feature di ES6 finora viste possono essere utilizzare fin da
subito con TypeScript, permettendo, inoltre, la compatibilità con
sistemi più datati*.
52
* Non tutte le possibilità di ES6 vengono supportate e convertite da TypeScript: https://kangax.github.io/compat-table/es6/
1.
LISTA DELLA SPESA
in collaborazione conES6 & TypeScript 53
in collaborazione conES6 & TypeScript
TypeScript
npm install -g typescript
https://www.typescriptlang.org/
54
in collaborazione conES6 & TypeScript
COME FUNZIONA
TYPESCRIPT?
55
in collaborazione conES6 & TypeScript
TypeScript, tecnicamente, è un transpiler, ossia "converte" il
linguaggio con cui stiamo scrivendo (typescript) in un altro
linguaggio (javascript).
Poiché TypeScript è un superset di JavaScript, l'unico linguaggio
utilizzato è JavaScript stesso, potenziato con alcune possibilità
offerte da TypeScript.
56
2.
TIPIZZAZIONE
in collaborazione conES6 & TypeScript 57
in collaborazione conES6 & TypeScript
È possibile tipizzare una variabile
assegnando un tipo di dato
58
let a: number = 1;
let b: string = 'This is a string';
let c: boolean = true;
let d: undefined;
let e: null = null;
in collaborazione conES6 & TypeScript 59
let a: number = 1;
La definizione del tipo è assolutamente opzionale.
Tuttavia, definire il tipo di dato previene gli errori e
permette ad IDE ed editor predisposti di aiutare lo
sviluppatore con suggerimenti di completamento.
in collaborazione conES6 & TypeScript
I tipi di dato possono essere aggiunti
anche a funzioni, sia per i parametri
d'ingresso, che per il valore di ritorno
60
function sum(a: number, b: number): number { }
function log(msg: string): void { }
Il tipo void indica che non ci sono
valori di ritorno.
in collaborazione conES6 & TypeScript
Esiste un tipo particolare introdotto da TypeScript,
cioè any, il quale permette di salvare qualsiasi tipo
di dato (e di modificarlo nel tempo).
61
const somethingSpecial: any;
È sempre buona norma usare meno any possibili!
in collaborazione conES6 & TypeScript
Per gli array (od oggetti in generale), è possibile
utilizzare due scritture diverse.
62
let d: number[] = [1, 2, 3];
let c: Array<number> = [1, 2, 3];
Il risultato sarà il medesimo, ma la seconda
definizione utilizza i generics per segnare che l'array
potrà contenere solo numeri.
3.
INTERFACES
in collaborazione conES6 & TypeScript 63
in collaborazione conES6 & TypeScript 64
Oltre ai tipi di dato primitivi, TypeScript permette di creare dei
modelli di dati personalizzati, chiamati interfaces, con i quali
poter avere controllo sulle strutture dati complesse.
in collaborazione conES6 & TypeScript 65
interface IPerson {
firstname: string;
lastname: string;
age: number;
}
Le interfacce rappresentano un contratto (una firma) da
applicare alle variabili. Anche se lo ricordano, non sono oggetti
JavaScript.
in collaborazione conES6 & TypeScript 66
interface IPerson {
firstname: string;
lastname: string;
age: number;
}
let pippo: IPerson = {
firstname: 'Pippo',
lastname: 'Pluto',
age: 33
}
in collaborazione conES6 & TypeScript 67
interface IPerson {
firstname: string;
lastname: string;
age: number;
weight?: number;
}
Alcuni elementi di una interfaccia possono essere opzionali
in collaborazione conES6 & TypeScript 68
class AppComponent implements OnInit {
ngOnInit() { }
}
Le interfacce, inoltre, possono venir implementate all'interno di
una classe mediante la direttiva implements.
interface OnInit {
ngOnInit(): void;
}
4.
GENERICS
in collaborazione conES6 & TypeScript 69
in collaborazione conES6 & TypeScript 70
Lo scopo principale di uno sviluppatore non è solo quello di
creare componenti con API ben definite, ma che si possano
anche riutilizzare.
In linguaggi come C# o Java esiste il concetto di generics, un
componente che possa essere utilizzato con una varietà di tipi di
dato, invece che con uno soltanto.
in collaborazione conES6 & TypeScript 71
function identity(arg: number): number {
return arg;
}
Prendiamo come esempio una funzione che, dato un parametro
in ingresso, ne ritorna lo stesso valore.
Se volessimo far si che il tipo dell'argomento e il ritorno della
funzione sia diverso per ogni tipo di dato, dovremmo creare n
funzioni, una per ogni tipo.
in collaborazione conES6 & TypeScript 72
function identity(arg: any): any {
return arg;
}
Potremmo utilizzare any per definire un valore generico (any, di
per sé, è un tipo generico).
Ma, in questo modo, perdiamo tutte le informazioni e le
possibilità che ci offre TypeScript.
in collaborazione conES6 & TypeScript 73
function identity<T>(arg: T): T {
return arg;
}
console.log(identity<number>(10));
console.log(identity<string>('A string'));
Modificando la funzione impostandola con un generic, invece,
facciamo si che sia lo sviluppatore a scegliere il tipo di dato
corretto da utilizzare di volta in volta.
T è solo un placeholder ed una convenzione. Può essere utilizzata qualsiasi altra lettera.
5.
TYPE DEFINITION FILES
in collaborazione conES6 & TypeScript 74
in collaborazione conES6 & TypeScript 75
Finché utilizziamo i tipi di dato inclusi e gestiti da TypeScript,
possiamo trarre beneficio da tutte le sue feature.
Ma se volessimo utilizzare una libreria esterna, come ad esempio
jQuery, con TypeScript?
in collaborazione conES6 & TypeScript 76
$('#app').css('background-color', 'red');
error TS2304: Cannot find name '$'.
in collaborazione conES6 & TypeScript 77
Per risolvere questo problema, TypeScript mette a disposizione la
possibilità di creare un particolare file (.d.ts) al cui interno ci
sono le definizioni dei tipi di dato.
in collaborazione conES6 & TypeScript 78
Definitely Typed
http://definitelytyped.org/
in collaborazione conES6 & TypeScript 79
Typings
npm install -g typings
typings install --global dt~jquery --save
Typings è deprecato dall'uscita di TypeScript 2.0
in collaborazione conES6 & TypeScript 80
@types
npm install --save-dev @types/jquery
Dalla versione 2.0 di TypeScript
in collaborazione conES6 & TypeScript
© 2017 - Giovanni Buffa
81

More Related Content

What's hot

Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021StreamNative
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updatemganeko
 
Clean Architecture for Unity
Clean Architecture for UnityClean Architecture for Unity
Clean Architecture for UnityMori Tetsuya
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들NHN FORWARD
 
Sinatra Rack And Middleware
Sinatra Rack And MiddlewareSinatra Rack And Middleware
Sinatra Rack And MiddlewareBen Schwarz
 
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...Edureka!
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJSSandi Barr
 
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?nixiesan
 
Node js overview
Node js overviewNode js overview
Node js overviewEyal Vardi
 
Introduction for Master Class "Amazing Reactive Forms"
Introduction for Master Class "Amazing Reactive Forms"Introduction for Master Class "Amazing Reactive Forms"
Introduction for Master Class "Amazing Reactive Forms"Fabio Biondi
 
RoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRailwaymen
 
RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019Fabio Biondi
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular ComponentsSquash Apps Pvt Ltd
 
RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)Tracy Lee
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsHolly Schinsky
 
Angular 4 The new Http Client Module
Angular 4 The new Http Client ModuleAngular 4 The new Http Client Module
Angular 4 The new Http Client Modulearjun singh
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Introduction to threejs
Introduction to threejsIntroduction to threejs
Introduction to threejsGareth Marland
 

What's hot (20)

Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
Using the JMS 2.0 API with Apache Pulsar - Pulsar Virtual Summit Europe 2021
 
WebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample updateWebRTC SFU Mediasoup Sample update
WebRTC SFU Mediasoup Sample update
 
Clean Architecture for Unity
Clean Architecture for UnityClean Architecture for Unity
Clean Architecture for Unity
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들[2018] Java를 위한, Java에 의한 도구들
[2018] Java를 위한, Java에 의한 도구들
 
Sinatra Rack And Middleware
Sinatra Rack And MiddlewareSinatra Rack And Middleware
Sinatra Rack And Middleware
 
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
JavaScript Tutorial For Beginners | JavaScript Training | JavaScript Programm...
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
 
そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?そのRails Engine、 本当に必要ですか?
そのRails Engine、 本当に必要ですか?
 
Node js overview
Node js overviewNode js overview
Node js overview
 
Introduction for Master Class "Amazing Reactive Forms"
Introduction for Master Class "Amazing Reactive Forms"Introduction for Master Class "Amazing Reactive Forms"
Introduction for Master Class "Amazing Reactive Forms"
 
RoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails exampleRoR Workshop - Web applications hacking - Ruby on Rails example
RoR Workshop - Web applications hacking - Ruby on Rails example
 
RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019RxJS & Angular Reactive Forms @ Codemotion 2019
RxJS & Angular Reactive Forms @ Codemotion 2019
 
Sharing Data Between Angular Components
Sharing Data Between Angular ComponentsSharing Data Between Angular Components
Sharing Data Between Angular Components
 
RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)RxJS Operators - Real World Use Cases (FULL VERSION)
RxJS Operators - Real World Use Cases (FULL VERSION)
 
The Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.jsThe Point of Vue - Intro to Vue.js
The Point of Vue - Intro to Vue.js
 
Angular 4 The new Http Client Module
Angular 4 The new Http Client ModuleAngular 4 The new Http Client Module
Angular 4 The new Http Client Module
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Introduction to threejs
Introduction to threejsIntroduction to threejs
Introduction to threejs
 

Similar to Introduzione ad ECMAScript 6 (ES6) e TypeScript

Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewFrancesco Sciuti
 
15 concetti importanti su javascript
15 concetti importanti su javascript15 concetti importanti su javascript
15 concetti importanti su javascriptGiovanni Buffa
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
EcmaScript 6 & 7
EcmaScript 6 & 7EcmaScript 6 & 7
EcmaScript 6 & 7BENTOSA
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++Marco Arena
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Marcello Missiroli
 
Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Fabio Collini
 
Introduzione ad Angular CLI
Introduzione ad Angular CLIIntroduzione ad Angular CLI
Introduzione ad Angular CLIGiovanni Buffa
 
Clean android code
Clean android codeClean android code
Clean android codefirenze-gtug
 
Django: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàDjango: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàskam
 

Similar to Introduzione ad ECMAScript 6 (ES6) e TypeScript (20)

Acadevmy - TypeScript Overview
Acadevmy - TypeScript OverviewAcadevmy - TypeScript Overview
Acadevmy - TypeScript Overview
 
15 concetti importanti su javascript
15 concetti importanti su javascript15 concetti importanti su javascript
15 concetti importanti su javascript
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Be groovy with JGrass
Be groovy with JGrassBe groovy with JGrass
Be groovy with JGrass
 
EcmaScript 6 & 7
EcmaScript 6 & 7EcmaScript 6 & 7
EcmaScript 6 & 7
 
eZ publish - Extension
eZ publish - ExtensioneZ publish - Extension
eZ publish - Extension
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
 
TYPO3 CMS 7.3 - le novita
TYPO3 CMS 7.3 - le novitaTYPO3 CMS 7.3 - le novita
TYPO3 CMS 7.3 - le novita
 
Pycon
PyconPycon
Pycon
 
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Programmazione a oggetti tramite la macchina del caffé (pt. 2)
 
Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014Clean android code - Droidcon Italiy 2014
Clean android code - Droidcon Italiy 2014
 
Introduzione ad Angular CLI
Introduzione ad Angular CLIIntroduzione ad Angular CLI
Introduzione ad Angular CLI
 
TYPO3 CMS 7.1 - Le novita
TYPO3 CMS 7.1 - Le novitaTYPO3 CMS 7.1 - Le novita
TYPO3 CMS 7.1 - Le novita
 
Clean android code
Clean android codeClean android code
Clean android code
 
Js intro
Js introJs intro
Js intro
 
Django: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalitàDjango: utilizzo avanzato e nuove funzionalità
Django: utilizzo avanzato e nuove funzionalità
 

More from Giovanni Buffa

Introduzioni ai services in Angular 4 e ad RxJS
Introduzioni ai services in Angular 4 e ad RxJSIntroduzioni ai services in Angular 4 e ad RxJS
Introduzioni ai services in Angular 4 e ad RxJSGiovanni Buffa
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Giovanni Buffa
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione AngularjsGiovanni Buffa
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Introduzione a Drupal - Versione Italiana
Introduzione a Drupal - Versione ItalianaIntroduzione a Drupal - Versione Italiana
Introduzione a Drupal - Versione ItalianaGiovanni Buffa
 
Laboratorio di Web Design 2015/16 - Introduzione al corso
Laboratorio di Web Design 2015/16 - Introduzione al corsoLaboratorio di Web Design 2015/16 - Introduzione al corso
Laboratorio di Web Design 2015/16 - Introduzione al corsoGiovanni Buffa
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Developing for Performances - Laboratorio di Web Design 2014/15
Developing for Performances - Laboratorio di Web Design 2014/15Developing for Performances - Laboratorio di Web Design 2014/15
Developing for Performances - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Responsive Web Design & Mobile
Responsive Web Design & MobileResponsive Web Design & Mobile
Responsive Web Design & MobileGiovanni Buffa
 
The CSS Survival Manual - Giovanni Buffa (2014)
The CSS Survival Manual - Giovanni Buffa (2014)The CSS Survival Manual - Giovanni Buffa (2014)
The CSS Survival Manual - Giovanni Buffa (2014)Giovanni Buffa
 
Introduzione al Theme Engin di Drupal 7
Introduzione al Theme Engin di Drupal 7Introduzione al Theme Engin di Drupal 7
Introduzione al Theme Engin di Drupal 7Giovanni Buffa
 
Introduzione a Drupal 7 Entity
Introduzione a Drupal 7 EntityIntroduzione a Drupal 7 Entity
Introduzione a Drupal 7 EntityGiovanni Buffa
 
SEO - Laboratorio di Web Design 2014/15
SEO - Laboratorio di Web Design 2014/15SEO - Laboratorio di Web Design 2014/15
SEO - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Introduzione a SASS - Laboratorio di Web Design 2014/15
Introduzione a SASS - Laboratorio di Web Design 2014/15Introduzione a SASS - Laboratorio di Web Design 2014/15
Introduzione a SASS - Laboratorio di Web Design 2014/15Giovanni Buffa
 
Laboratorio di Web Design Base - 2014/15 - HTML/5
Laboratorio di Web Design Base - 2014/15 - HTML/5Laboratorio di Web Design Base - 2014/15 - HTML/5
Laboratorio di Web Design Base - 2014/15 - HTML/5Giovanni Buffa
 
Laboratorio di Web Design Base - 2014/15 - Web History
Laboratorio di Web Design Base - 2014/15 - Web HistoryLaboratorio di Web Design Base - 2014/15 - Web History
Laboratorio di Web Design Base - 2014/15 - Web HistoryGiovanni Buffa
 

More from Giovanni Buffa (20)

Introduzioni ai services in Angular 4 e ad RxJS
Introduzioni ai services in Angular 4 e ad RxJSIntroduzioni ai services in Angular 4 e ad RxJS
Introduzioni ai services in Angular 4 e ad RxJS
 
Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4Introduzione ai componenti in Angular 4
Introduzione ai componenti in Angular 4
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Angular 4 -  convertire o migrare un'applicazione AngularjsAngular 4 -  convertire o migrare un'applicazione Angularjs
Angular 4 - convertire o migrare un'applicazione Angularjs
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Introduzione a Drupal - Versione Italiana
Introduzione a Drupal - Versione ItalianaIntroduzione a Drupal - Versione Italiana
Introduzione a Drupal - Versione Italiana
 
Laboratorio di Web Design 2015/16 - Introduzione al corso
Laboratorio di Web Design 2015/16 - Introduzione al corsoLaboratorio di Web Design 2015/16 - Introduzione al corso
Laboratorio di Web Design 2015/16 - Introduzione al corso
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15Introduzione a GIT - Laboratorio di Web Design 2014/15
Introduzione a GIT - Laboratorio di Web Design 2014/15
 
Developing for Performances - Laboratorio di Web Design 2014/15
Developing for Performances - Laboratorio di Web Design 2014/15Developing for Performances - Laboratorio di Web Design 2014/15
Developing for Performances - Laboratorio di Web Design 2014/15
 
Responsive Web Design & Mobile
Responsive Web Design & MobileResponsive Web Design & Mobile
Responsive Web Design & Mobile
 
The CSS Survival Manual - Giovanni Buffa (2014)
The CSS Survival Manual - Giovanni Buffa (2014)The CSS Survival Manual - Giovanni Buffa (2014)
The CSS Survival Manual - Giovanni Buffa (2014)
 
Introduzione al Theme Engin di Drupal 7
Introduzione al Theme Engin di Drupal 7Introduzione al Theme Engin di Drupal 7
Introduzione al Theme Engin di Drupal 7
 
Introduzione a Drupal 7 Entity
Introduzione a Drupal 7 EntityIntroduzione a Drupal 7 Entity
Introduzione a Drupal 7 Entity
 
SEO - Laboratorio di Web Design 2014/15
SEO - Laboratorio di Web Design 2014/15SEO - Laboratorio di Web Design 2014/15
SEO - Laboratorio di Web Design 2014/15
 
Introduzione a SASS - Laboratorio di Web Design 2014/15
Introduzione a SASS - Laboratorio di Web Design 2014/15Introduzione a SASS - Laboratorio di Web Design 2014/15
Introduzione a SASS - Laboratorio di Web Design 2014/15
 
Introduzione a Drupal
Introduzione a DrupalIntroduzione a Drupal
Introduzione a Drupal
 
CSS - Box Model
CSS - Box ModelCSS - Box Model
CSS - Box Model
 
Laboratorio di Web Design Base - 2014/15 - HTML/5
Laboratorio di Web Design Base - 2014/15 - HTML/5Laboratorio di Web Design Base - 2014/15 - HTML/5
Laboratorio di Web Design Base - 2014/15 - HTML/5
 
Laboratorio di Web Design Base - 2014/15 - Web History
Laboratorio di Web Design Base - 2014/15 - Web HistoryLaboratorio di Web Design Base - 2014/15 - Web History
Laboratorio di Web Design Base - 2014/15 - Web History
 

Introduzione ad ECMAScript 6 (ES6) e TypeScript

  • 1. Angular 4 ES6 & TypeScript
  • 2. in collaborazione conES6 & TypeScript COS'È TYPESCRIPT? 2
  • 3. in collaborazione conES6 & TypeScript TypeScript è un super-set di JavaScript, OpenSource, realizzato e mantenuto da Microsoft. Estende la sintassi di JavaScript, rendendo la sua adozione più immediata e veloce. 3
  • 4. in collaborazione conES6 & TypeScript PERCHÉ TYPESCRIPT? 4
  • 5. in collaborazione conES6 & TypeScript ✴TypeScript è stato ideato per realizzare Web Applications su larga scala, in modo da rendere più facile il mantenimento del codice; ✴La pre-compilazione e i costrutti introdotti da TypeScript rendono il codice più espressivo, riducendo il numero degli errori in fase di stesura; ✴Permette già da subito di utilizzare buona parte delle novità introdotte con ES6 senza sacrificare il supporto a browser più datati. 5
  • 6. in collaborazione conES6 & TypeScript ✴TypeScript è completamente slegato da Angular. Anche se è possibile scrivere un'applicazione Angular utilizzando JavaScript, il framework stesso è scritto in TypeScript. Inoltre, la complessità di Angular rende TypeScript una tecnologia quasi necessaria. ✴Essendo slegato da qualsiasi contesto, è possibile utilizzare TypeScript per qualsiasi progetto JavaScript (e consiglio di farlo). 6
  • 7. in collaborazione conES6 & TypeScript PRINCIPALI VANTAGGI 7
  • 8. in collaborazione conES6 & TypeScript ✴TypeScript previene gli errori a compile-time; ✴Introducendo i tipi, permette di avere più controllo, rendendo il codice autoesplicativo e mantenibile prevenendo, di nuovo, gli errori; ✴Tutto il codice ES6 può venir convertito in codice ES5 al momento della compilazione in modo trasparente e sicuro. 8
  • 9. in collaborazione conES6 & TypeScript this class let const () => { } map forEach (a = 10) { } […params] `Awesome string ${interpolation}`{ x, y } export import extends Symbol Typed Arrays Promise ES6 (…b) { } 9
  • 10. 1. LISTA DELLA SPESA in collaborazione conES6 & TypeScript 10
  • 11. in collaborazione conES6 & TypeScript WebStorm https://www.jetbrains.com/webstorm/ 11
  • 12. in collaborazione conES6 & TypeScript Visual Studio
 Code https://code.visualstudio.com/ 12 ...consiglio però vivamente WebStorm!!!
  • 13. Introduzione ad ES6 Le principali novità
  • 14. in collaborazione conES6 & TypeScript Molte delle novità introdotte con ES6 sono delle shortcuts rispetto ad ES5, andando a semplificare il lavoro degli sviluppatori. Per maggiori informazioni
 http://es6-features.org/ 14
  • 16. in collaborazione conES6 & TypeScript Assieme a var, è stata creata let, variabile di tipo block-scoped. 16 var a = 1; var b = 2; if(a > b){ let c = 3; } console.log(c); // ReferenceError
  • 17. in collaborazione conES6 & TypeScript È stato introdotto anche l'uso delle costanti con const 17 const PI = 3.14; console.log(PI); // 3.14 PI = 2; // invalid assignment to const 'PI'
  • 19. in collaborazione conES6 & TypeScript Vengono introdotte le Arrow Functions, un modo per definire una funzione in modo più semplice. Grazie a questo costrutto viene anche risolto il problema di this all'interno degli oggetti. 19
  • 20. in collaborazione conES6 & TypeScript 20 var log = function(msg) { console.log(msg); } var log = msg => console.log(msg);
  • 21. in collaborazione conES6 & TypeScript 21 var c = { name: 'Pippo', greet: function(){ var setName = (newName) => this.name = newName; setName('Pluto'); } }
  • 22. in collaborazione conES6 & TypeScript Grazie ai default parameters, è possibile valorizzare un parametro in ingresso di una funzione senza la necessità di definirlo al momento dell'utilizzo della funzione stessa. 22
  • 23. in collaborazione conES6 & TypeScript 23 var log = function(msg = 'This is a message') { console.log(msg); } log();
  • 24. in collaborazione conES6 & TypeScript È possibile passare n parametri in ingresso ad una funzione grazie allo spread operator. 24
  • 25. in collaborazione conES6 & TypeScript 25 var log = function(msg, ...other) { const otherString = other.join(' '); console.log(msg + ' ' + otherString); } log('This is a message', 'a', 'b', 3);
  • 27. in collaborazione conES6 & TypeScript Grazie a string interpolation, è possibile formattare una stringa, senza ricorrere alla concatenazione classica, utilizzando il simbolo `` (back-tick). Vengono mantenuti anche spazi, tabulazioni e a capo. 27
  • 28. in collaborazione conES6 & TypeScript 28 let a = 'This is'; let b = 'a message.'; console.log(`${a} ${b}`); let a = 'This is'; let b = 'a message.'; console.log(` ${a} ${b} `);
  • 30. in collaborazione conES6 & TypeScript È possibile concatenare più array grazie allo spread operator. 30
  • 31. in collaborazione conES6 & TypeScript 31 let a = [1, 2, 3]; let b = [4, 5, 6]; console.log([...a, ...b]); console.log([...b, ...a]);
  • 32. in collaborazione conES6 & TypeScript Grazie al destructuring è possibile mappare, valore per valore, gli elementi di un array*. 32 * utilizzabile anche su oggetti.
  • 33. in collaborazione conES6 & TypeScript 33 const a = ['Pippo', 'Pluto']; let [firstname, lastname] = a; console.log(firstname); console.log(lastname);
  • 34. in collaborazione conES6 & TypeScript 34 const a = ['Pippo', 'Pluto', 'Paperino']; let [firstname, , lastname] = a; console.log(firstname); console.log(lastname);
  • 36. in collaborazione conES6 & TypeScript Le classi in ES6 rappresentano un modo veloce per utilizzare le funzioni come function constructor. 36
  • 37. in collaborazione conES6 & TypeScript 37 class Person = { constructor(firstName, lastName){ this.firstName = firstName; this.lastName = lastName; } sayHi(){ return `Hi ${this.firstName}`; } } var pippo = new Person(‘Pippo’, ‘Pluto’); console.log(pippo.sayHi());
  • 38. in collaborazione conES6 & TypeScript 38 var Person = (function () { function Person(firstname, lastname) { this.firstname = firstname; this.lastname = lastname; } Person.prototype.sayHi = function () { return "Hi " + this.firstname + "!"; }; return Person; }()); var pippo = new Person(‘Pippo’, ‘Pluto’); console.log(pippo.sayHi());
  • 39. in collaborazione conES6 & TypeScript Per avere maggiore controllo sulle proprietà della classe, è possibile implementare getter e setter. 39
  • 40. in collaborazione conES6 & TypeScript 40 class Person = { constructor(firstName, lastName){ this._firstname = firstname; } get firstname() { return this._firstname; } set firstname(value) { if (this._firstname.length === 0) { this._firstname = value; } else { console.log('You cannot change the name!'); } } } var pippo = new Person(‘Pippo’, ‘Pluto’); console.log(pippo.firstname); pippo.firstname = 'Paperino';
  • 41. in collaborazione conES6 & TypeScript È possibile estendere le classi (principio di ereditarietà). 41
  • 42. in collaborazione conES6 & TypeScript 42 class BaseLog { constructor(){ this._logName = 'Log 1'; } log(msg){ console.log(msg); } } class Logger extends BaseLog { constructor(logName){ super(logName); } writeLine(msg){ super.log(`${msg}rn#`); } } var logger = new Logger(‘Test’); logger.log('This is a log'); logger.writeLine('This is another log');
  • 44. in collaborazione conES6 & TypeScript Con ES6 è stata aggiunta la possibilità di creare dei moduli da poter esportare ed importare a seconda delle esigenze. Allo stato attuale, per poter utilizzare questa feature è necessario un module loader come CommonJS o AMD. Grazie ad Angular CLI (e Webpack), questa feature è già attiva e funzionante in un nuovo progetto Angular. 44
  • 45. in collaborazione conES6 & TypeScript 45 // customer.js export let name = 'James'; export let city = 'Chandler'; // main.js import { name, city } from './customer'; console.log(name); console.log(city); // main2.js import * as customer from './customer'; console.log(customer.name); console.log(customer.city);
  • 46. 7. MAPS & SETS in collaborazione conES6 & TypeScript 46
  • 47. in collaborazione conES6 & TypeScript Con Map e Set è possibile collezionare e salvare dei dati. Map può salvare una collezione di coppie chiave/valore (la chiave deve essere univoca). 47
  • 48. in collaborazione conES6 & TypeScript 48 const map = new Map(); // set items map.set('Pippo', 'Pluto'); map.set('One', 'Item'); // duplicate index, ignored map.set('Pippo', 'Pluto'); // get size of map console.log(map.size); // get an item console.log(map.get('Pippo')); // check if item exists console.log(map.has('Pippo')); // delete an item map.delete('One'); // clear list map.clear();
  • 49. in collaborazione conES6 & TypeScript Set può salvare una collezione di valori (il valore deve essere univoco). 49
  • 50. in collaborazione conES6 & TypeScript 50 const set = new Set(); // add items set.add('Pippo'); set.add('Pluto'); // duplicate value, ignored set.add('Pippo'); // get size of set console.log(set.size); // check if item exists console.log(set.has('Pippo')); // delete an item set.delete('Pluto'); // clear list set.clear();
  • 52. in collaborazione conES6 & TypeScript Tutte le feature di ES6 finora viste possono essere utilizzare fin da subito con TypeScript, permettendo, inoltre, la compatibilità con sistemi più datati*. 52 * Non tutte le possibilità di ES6 vengono supportate e convertite da TypeScript: https://kangax.github.io/compat-table/es6/
  • 53. 1. LISTA DELLA SPESA in collaborazione conES6 & TypeScript 53
  • 54. in collaborazione conES6 & TypeScript TypeScript npm install -g typescript https://www.typescriptlang.org/ 54
  • 55. in collaborazione conES6 & TypeScript COME FUNZIONA TYPESCRIPT? 55
  • 56. in collaborazione conES6 & TypeScript TypeScript, tecnicamente, è un transpiler, ossia "converte" il linguaggio con cui stiamo scrivendo (typescript) in un altro linguaggio (javascript). Poiché TypeScript è un superset di JavaScript, l'unico linguaggio utilizzato è JavaScript stesso, potenziato con alcune possibilità offerte da TypeScript. 56
  • 58. in collaborazione conES6 & TypeScript È possibile tipizzare una variabile assegnando un tipo di dato 58 let a: number = 1; let b: string = 'This is a string'; let c: boolean = true; let d: undefined; let e: null = null;
  • 59. in collaborazione conES6 & TypeScript 59 let a: number = 1; La definizione del tipo è assolutamente opzionale. Tuttavia, definire il tipo di dato previene gli errori e permette ad IDE ed editor predisposti di aiutare lo sviluppatore con suggerimenti di completamento.
  • 60. in collaborazione conES6 & TypeScript I tipi di dato possono essere aggiunti anche a funzioni, sia per i parametri d'ingresso, che per il valore di ritorno 60 function sum(a: number, b: number): number { } function log(msg: string): void { } Il tipo void indica che non ci sono valori di ritorno.
  • 61. in collaborazione conES6 & TypeScript Esiste un tipo particolare introdotto da TypeScript, cioè any, il quale permette di salvare qualsiasi tipo di dato (e di modificarlo nel tempo). 61 const somethingSpecial: any; È sempre buona norma usare meno any possibili!
  • 62. in collaborazione conES6 & TypeScript Per gli array (od oggetti in generale), è possibile utilizzare due scritture diverse. 62 let d: number[] = [1, 2, 3]; let c: Array<number> = [1, 2, 3]; Il risultato sarà il medesimo, ma la seconda definizione utilizza i generics per segnare che l'array potrà contenere solo numeri.
  • 64. in collaborazione conES6 & TypeScript 64 Oltre ai tipi di dato primitivi, TypeScript permette di creare dei modelli di dati personalizzati, chiamati interfaces, con i quali poter avere controllo sulle strutture dati complesse.
  • 65. in collaborazione conES6 & TypeScript 65 interface IPerson { firstname: string; lastname: string; age: number; } Le interfacce rappresentano un contratto (una firma) da applicare alle variabili. Anche se lo ricordano, non sono oggetti JavaScript.
  • 66. in collaborazione conES6 & TypeScript 66 interface IPerson { firstname: string; lastname: string; age: number; } let pippo: IPerson = { firstname: 'Pippo', lastname: 'Pluto', age: 33 }
  • 67. in collaborazione conES6 & TypeScript 67 interface IPerson { firstname: string; lastname: string; age: number; weight?: number; } Alcuni elementi di una interfaccia possono essere opzionali
  • 68. in collaborazione conES6 & TypeScript 68 class AppComponent implements OnInit { ngOnInit() { } } Le interfacce, inoltre, possono venir implementate all'interno di una classe mediante la direttiva implements. interface OnInit { ngOnInit(): void; }
  • 70. in collaborazione conES6 & TypeScript 70 Lo scopo principale di uno sviluppatore non è solo quello di creare componenti con API ben definite, ma che si possano anche riutilizzare. In linguaggi come C# o Java esiste il concetto di generics, un componente che possa essere utilizzato con una varietà di tipi di dato, invece che con uno soltanto.
  • 71. in collaborazione conES6 & TypeScript 71 function identity(arg: number): number { return arg; } Prendiamo come esempio una funzione che, dato un parametro in ingresso, ne ritorna lo stesso valore. Se volessimo far si che il tipo dell'argomento e il ritorno della funzione sia diverso per ogni tipo di dato, dovremmo creare n funzioni, una per ogni tipo.
  • 72. in collaborazione conES6 & TypeScript 72 function identity(arg: any): any { return arg; } Potremmo utilizzare any per definire un valore generico (any, di per sé, è un tipo generico). Ma, in questo modo, perdiamo tutte le informazioni e le possibilità che ci offre TypeScript.
  • 73. in collaborazione conES6 & TypeScript 73 function identity<T>(arg: T): T { return arg; } console.log(identity<number>(10)); console.log(identity<string>('A string')); Modificando la funzione impostandola con un generic, invece, facciamo si che sia lo sviluppatore a scegliere il tipo di dato corretto da utilizzare di volta in volta. T è solo un placeholder ed una convenzione. Può essere utilizzata qualsiasi altra lettera.
  • 74. 5. TYPE DEFINITION FILES in collaborazione conES6 & TypeScript 74
  • 75. in collaborazione conES6 & TypeScript 75 Finché utilizziamo i tipi di dato inclusi e gestiti da TypeScript, possiamo trarre beneficio da tutte le sue feature. Ma se volessimo utilizzare una libreria esterna, come ad esempio jQuery, con TypeScript?
  • 76. in collaborazione conES6 & TypeScript 76 $('#app').css('background-color', 'red'); error TS2304: Cannot find name '$'.
  • 77. in collaborazione conES6 & TypeScript 77 Per risolvere questo problema, TypeScript mette a disposizione la possibilità di creare un particolare file (.d.ts) al cui interno ci sono le definizioni dei tipi di dato.
  • 78. in collaborazione conES6 & TypeScript 78 Definitely Typed http://definitelytyped.org/
  • 79. in collaborazione conES6 & TypeScript 79 Typings npm install -g typings typings install --global dt~jquery --save Typings è deprecato dall'uscita di TypeScript 2.0
  • 80. in collaborazione conES6 & TypeScript 80 @types npm install --save-dev @types/jquery Dalla versione 2.0 di TypeScript
  • 81. in collaborazione conES6 & TypeScript © 2017 - Giovanni Buffa 81