SlideShare a Scribd company logo
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 (20)

PDF
React & GraphQL
Nikolas Burk
 
PPTX
REST Easy with Django-Rest-Framework
Marcel Chastain
 
PPTX
ASP.NET Web API
habib_786
 
PPTX
Django Architecture Introduction
Haiqi Chen
 
PPTX
REST API Design & Development
Ashok Pundit
 
PDF
Advanced Node.JS Meetup
LINAGORA
 
PDF
TypeScript - An Introduction
NexThoughts Technologies
 
PPTX
What-is-Laravel-23-August-2017.pptx
AbhijeetKumar456867
 
PDF
AWS DevOps
hemagunty
 
PPTX
Rest API
Rohana K Amarakoon
 
PPTX
RESTful API - Best Practices
Tricode (part of Dept)
 
PPTX
File system node js
monikadeshmane
 
PPTX
Introduction to graphQL
Muhilvarnan V
 
PDF
NextJS, A JavaScript Framework for building next generation SPA
Pramendra Gupta
 
PDF
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
PDF
Frontrunners react
Allison Kunz
 
PDF
TypeScript Introduction
Dmitry Sheiko
 
PPTX
introduction to node.js
orkaplan
 
PDF
From Spring Framework 5.3 to 6.0
VMware Tanzu
 
React & GraphQL
Nikolas Burk
 
REST Easy with Django-Rest-Framework
Marcel Chastain
 
ASP.NET Web API
habib_786
 
Django Architecture Introduction
Haiqi Chen
 
REST API Design & Development
Ashok Pundit
 
Advanced Node.JS Meetup
LINAGORA
 
TypeScript - An Introduction
NexThoughts Technologies
 
What-is-Laravel-23-August-2017.pptx
AbhijeetKumar456867
 
AWS DevOps
hemagunty
 
RESTful API - Best Practices
Tricode (part of Dept)
 
File system node js
monikadeshmane
 
Introduction to graphQL
Muhilvarnan V
 
NextJS, A JavaScript Framework for building next generation SPA
Pramendra Gupta
 
JavaScript - Chapter 15 - Debugging Techniques
WebStackAcademy
 
Frontrunners react
Allison Kunz
 
TypeScript Introduction
Dmitry Sheiko
 
introduction to node.js
orkaplan
 
From Spring Framework 5.3 to 6.0
VMware Tanzu
 

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

PDF
Acadevmy - TypeScript Overview
Francesco Sciuti
 
PDF
TypeScript, ovvero JavaScript che "non si rompe"
BENTOSA
 
PDF
DotNetToscana - Sessione TypeScript
Sinergia Totale
 
PPTX
Introduzione a TypeScript
Sinergia Totale
 
PDF
EcmaScript 6 & 7
BENTOSA
 
PDF
Object Oriented JavaScript con TypeScript
Silvia Gioia Florio
 
PDF
Es6 are you ready?
lmurruni
 
PDF
Acadevmy - ES6 Modern JS Today
Francesco Sciuti
 
PPTX
Da JavaScript a TypeScript
Roberto Messora
 
PPTX
Slide typescript - xe dotnet - Codemotion Rome 2015
Codemotion
 
PPTX
Javascript
Roberto Cappelletti
 
PPTX
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
DotNetCampus
 
PPTX
Slide typescript - net campus
DotNetCampus
 
PPTX
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
From The Front
 
PDF
Acadevmy - GraphQL & Angular: Tutto il REST è noia!
Francesco Sciuti
 
PPTX
Corso 3 giorni Angular 2+
Emanuele Benedetti
 
PDF
Intro to JavaScript
Alessandro Muraro
 
PPTX
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
EduardCapanu
 
PDF
MyTask
Pasquale Matrone
 
PDF
Introduzione a node.js
Luciano Colosio
 
Acadevmy - TypeScript Overview
Francesco Sciuti
 
TypeScript, ovvero JavaScript che "non si rompe"
BENTOSA
 
DotNetToscana - Sessione TypeScript
Sinergia Totale
 
Introduzione a TypeScript
Sinergia Totale
 
EcmaScript 6 & 7
BENTOSA
 
Object Oriented JavaScript con TypeScript
Silvia Gioia Florio
 
Es6 are you ready?
lmurruni
 
Acadevmy - ES6 Modern JS Today
Francesco Sciuti
 
Da JavaScript a TypeScript
Roberto Messora
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Codemotion
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
DotNetCampus
 
Slide typescript - net campus
DotNetCampus
 
Diversamente Javascript: si.. può.. fare! (di Mirko Ravaioli)
From The Front
 
Acadevmy - GraphQL & Angular: Tutto il REST è noia!
Francesco Sciuti
 
Corso 3 giorni Angular 2+
Emanuele Benedetti
 
Intro to JavaScript
Alessandro Muraro
 
Come pensare in TypeScript (Part 1) (Eduard Capanu).pptx
EduardCapanu
 
Introduzione a node.js
Luciano Colosio
 
Ad

More from Giovanni Buffa (20)

PDF
Introduzioni ai services in Angular 4 e ad RxJS
Giovanni Buffa
 
PDF
Introduzione ai componenti in Angular 4
Giovanni Buffa
 
PDF
Introduzione ad Angular CLI
Giovanni Buffa
 
PDF
15 concetti importanti su javascript
Giovanni Buffa
 
PDF
Angular 4 - convertire o migrare un'applicazione Angularjs
Giovanni Buffa
 
PDF
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
 
PDF
Introduzione a Drupal - Versione Italiana
Giovanni Buffa
 
PDF
Laboratorio di Web Design 2015/16 - Introduzione al corso
Giovanni Buffa
 
PDF
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
PDF
Introduzione a JavaScript
Giovanni Buffa
 
PDF
Introduzione a GIT - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
PDF
Developing for Performances - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
PDF
Responsive Web Design & Mobile
Giovanni Buffa
 
PDF
The CSS Survival Manual - Giovanni Buffa (2014)
Giovanni Buffa
 
PDF
Introduzione al Theme Engin di Drupal 7
Giovanni Buffa
 
PDF
Introduzione a Drupal 7 Entity
Giovanni Buffa
 
PDF
SEO - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
PDF
Introduzione a SASS - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
PDF
Introduzione a Drupal
Giovanni Buffa
 
PDF
CSS - Box Model
Giovanni Buffa
 
Introduzioni ai services in Angular 4 e ad RxJS
Giovanni Buffa
 
Introduzione ai componenti in Angular 4
Giovanni Buffa
 
Introduzione ad Angular CLI
Giovanni Buffa
 
15 concetti importanti su javascript
Giovanni Buffa
 
Angular 4 - convertire o migrare un'applicazione Angularjs
Giovanni Buffa
 
Angular js o React? Spunti e idee per la scelta di un framework
Giovanni Buffa
 
Introduzione a Drupal - Versione Italiana
Giovanni Buffa
 
Laboratorio di Web Design 2015/16 - Introduzione al corso
Giovanni Buffa
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
Introduzione a JavaScript
Giovanni Buffa
 
Introduzione a GIT - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
Developing for Performances - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
Responsive Web Design & Mobile
Giovanni Buffa
 
The CSS Survival Manual - Giovanni Buffa (2014)
Giovanni Buffa
 
Introduzione al Theme Engin di Drupal 7
Giovanni Buffa
 
Introduzione a Drupal 7 Entity
Giovanni Buffa
 
SEO - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
Introduzione a SASS - Laboratorio di Web Design 2014/15
Giovanni Buffa
 
Introduzione a Drupal
Giovanni Buffa
 
CSS - Box Model
Giovanni Buffa
 
Ad

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