TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de...

285
TypeScript pour Angular Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 142

Transcript of TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de...

Page 1: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

TypeScript pour Angular

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 142

Page 2: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Plan

1 Introduction

2 VariableDeclarationUnion de typeVariable localeCastConversionAlias de typeNullish Coalescing (Coalescence nulle)

3 Constante

H & H: Research and Training 2 / 142

Page 3: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Plan

4 FonctionDeclaration et appelParametres par defautParametres optionnelsParametres restantsParametres a plusieurs types autorisesParametres en lecture seuleFonctions flechees (arrow function)

5 Concept de decomposition (spread)

6 import / export

H & H: Research and Training 3 / 142

Page 4: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Plan

7 ClasseRappelSyntaxeSetterGetterConstructeurAttributs et methodes statiques

8 Heritage9 Classe et methode abstraites10 Interface11 Decorateur12 Genericite13 Map14 Set

H & H: Research and Training 4 / 142

Page 5: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

ECMAScript

ensemble de normes sur les langages de programmation de typescript (JavaScript, ActionScript...)

standardisee par Ecma International (European ComputerManufacturers Association) depuis 1994

Quelques versions

ECMAScript version 5 (ES5) ou ES 2009

ECMAScript version 6 (ES6) ou ES 2015 (compatible avec lesnavigateurs modernes)

H & H: Research and Training 5 / 142

Page 6: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

ECMAScript

ensemble de normes sur les langages de programmation de typescript (JavaScript, ActionScript...)

standardisee par Ecma International (European ComputerManufacturers Association) depuis 1994

Quelques versions

ECMAScript version 5 (ES5) ou ES 2009

ECMAScript version 6 (ES6) ou ES 2015 (compatible avec lesnavigateurs modernes)

H & H: Research and Training 5 / 142

Page 7: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

TypeScript

langage de programmation

procedural et oriente objet

supportant le typage statique, dynamique et generique

open-source

cree par Anders Hejlsberg (inventeur de C#) de MicroSoft

utilise par Angular (Google)

H & H: Research and Training 6 / 142

Page 8: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScriptTypeScript : sur-couche de ES6 ajoutant

typage

meilleure gestion de module (a ne pas confondre avec lesmodules Angular)

JavaScript

(ES5)

ES6

TypeScript

H & H: Research and Training 7 / 142

Page 9: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

Le navigateur ne comprend pas le TypeScript

Il faut le transcompiler (ou transpiler) en JavaScript

file.ts

transpiler

file.js

H & H: Research and Training 8 / 142

Page 10: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

Comment va t-on proceder dans ce cours?

file.ts

transpiler

file.jsexecuter

resultat

tsc file.ts node file.js

tsc file.ts | node file.js

Pour consulter la liste des options pour la commande tsc

https://www.typescriptlang.org/docs/handbook/compiler-options.html

H & H: Research and Training 9 / 142

Page 11: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

De quoi on a besoin ?

Node.js pour executer la commande node

TypeScript pour executer la commande tsc

H & H: Research and Training 10 / 142

Page 12: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

Pour Node.js, il faut

aller sur https://nodejs.org/en/

choisir la derniere version, telecharger et installer

Pour TypeScript, il faut

ouvrir une console (invite de commandes)

lancer la commande npm install -g typescript

verifier la version avec la commande tsc -v

H & H: Research and Training 11 / 142

Page 13: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

Pour Node.js, il faut

aller sur https://nodejs.org/en/

choisir la derniere version, telecharger et installer

Pour TypeScript, il faut

ouvrir une console (invite de commandes)

lancer la commande npm install -g typescript

verifier la version avec la commande tsc -v

H & H: Research and Training 11 / 142

Page 14: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Introduction

TypeScript

Quel IDE pour TypeScript (et eventuellement Angular)

Microsoft recommande Visual Studio Code

code.visualstudio.com/download

H & H: Research and Training 12 / 142

Page 15: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptDeclarer une variable

var nomVariable: typeVariable;

Exemple

var x: number;

Initialiser une variable

x = 2;

Declarer et initialiser une variable

var x: number = 2;

H & H: Research and Training 13 / 142

Page 16: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptDeclarer une variable

var nomVariable: typeVariable;

Exemple

var x: number;

Initialiser une variable

x = 2;

Declarer et initialiser une variable

var x: number = 2;

H & H: Research and Training 13 / 142

Page 17: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptDeclarer une variable

var nomVariable: typeVariable;

Exemple

var x: number;

Initialiser une variable

x = 2;

Declarer et initialiser une variable

var x: number = 2;

H & H: Research and Training 13 / 142

Page 18: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptDeclarer une variable

var nomVariable: typeVariable;

Exemple

var x: number;

Initialiser une variable

x = 2;

Declarer et initialiser une variable

var x: number = 2;

H & H: Research and Training 13 / 142

Page 19: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Cependant, ceci genere une erreur car une varaible ne changepas de type

x = "bonjour";

H & H: Research and Training 14 / 142

Page 20: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Quels types pour les variables en TypeScript ?

number pour les nombres (entiers, reels, binaires, decimaux, hexadecimaux...)

string pour les chaınes de caractere

boolean pour les booleens

array pour les tableaux non-statiques (taille variable)

tuple pour les tableaux statiques (taille et type fixes)

object pour les objets

any pour les variables pouvant changer de type dans le programme

enum pour les enumerations (tableau de constantes)

Les types undefined et null du JavaScript sont aussi disponibles.

H & H: Research and Training 15 / 142

Page 21: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Quels types pour les variables en TypeScript ?

number pour les nombres (entiers, reels, binaires, decimaux, hexadecimaux...)

string pour les chaınes de caractere

boolean pour les booleens

array pour les tableaux non-statiques (taille variable)

tuple pour les tableaux statiques (taille et type fixes)

object pour les objets

any pour les variables pouvant changer de type dans le programme

enum pour les enumerations (tableau de constantes)

Les types undefined et null du JavaScript sont aussi disponibles.H & H: Research and Training 15 / 142

Page 22: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les chaınes de caracteres, on peut faire

var str1: string = "wick";var str2: string = ’john’;

On peut aussi utiliser template strings

var str3: string = ‘Bonjour ${ str2 } ${ str1 }Que pensez-vous de TypeScript ?‘;console.log(str3);// affiche Bonjour john wickQue pensez-vous de TypeScript ?

L’equivalent de faire

var str3: string = "Bonjour " + str2 + " " + str1 + "\nQuepensez-vous de TypeScript ?";

H & H: Research and Training 16 / 142

Page 23: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les chaınes de caracteres, on peut faire

var str1: string = "wick";var str2: string = ’john’;

On peut aussi utiliser template strings

var str3: string = ‘Bonjour ${ str2 } ${ str1 }Que pensez-vous de TypeScript ?‘;console.log(str3);// affiche Bonjour john wickQue pensez-vous de TypeScript ?

L’equivalent de faire

var str3: string = "Bonjour " + str2 + " " + str1 + "\nQuepensez-vous de TypeScript ?";

H & H: Research and Training 16 / 142

Page 24: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les chaınes de caracteres, on peut faire

var str1: string = "wick";var str2: string = ’john’;

On peut aussi utiliser template strings

var str3: string = ‘Bonjour ${ str2 } ${ str1 }Que pensez-vous de TypeScript ?‘;console.log(str3);// affiche Bonjour john wickQue pensez-vous de TypeScript ?

L’equivalent de faire

var str3: string = "Bonjour " + str2 + " " + str1 + "\nQuepensez-vous de TypeScript ?";

H & H: Research and Training 16 / 142

Page 25: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptUne premiere declaration pour les tableaux

var list: number[] = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

Une deuxieme declaration

var list: Array<number> = new Array(1, 2, 3);console.log(list);// affiche [ 1, 2, 3 ]

Ou encore plus simple

var list: Array<number> = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 17 / 142

Page 26: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptUne premiere declaration pour les tableaux

var list: number[] = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

Une deuxieme declaration

var list: Array<number> = new Array(1, 2, 3);console.log(list);// affiche [ 1, 2, 3 ]

Ou encore plus simple

var list: Array<number> = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 17 / 142

Page 27: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptUne premiere declaration pour les tableaux

var list: number[] = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

Une deuxieme declaration

var list: Array<number> = new Array(1, 2, 3);console.log(list);// affiche [ 1, 2, 3 ]

Ou encore plus simple

var list: Array<number> = [1, 2, 3];console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 17 / 142

Page 28: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Remarques

En JavaScript, il n’y a pas de methode range pour generer un tableau contenant unintervalle de valeurs entieres consecutives.

Avec EcmaScript 6, on peut utiliser des methodes comme from et keys pour generer unintervalle de valeurs entieres consecutives.

Exemple

var list: number[] = Array.from(Array(3).keys())console.log(list);// affiche [ 0, 1, 2 ]

On peut utiliser une fonction flechee (a voir dans une prochaine section) pour modifier lesvaleurs generees

var list: number[] = Array.from({ length: 3 }, (v, k) => k + 1)console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 18 / 142

Page 29: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Remarques

En JavaScript, il n’y a pas de methode range pour generer un tableau contenant unintervalle de valeurs entieres consecutives.

Avec EcmaScript 6, on peut utiliser des methodes comme from et keys pour generer unintervalle de valeurs entieres consecutives.

Exemple

var list: number[] = Array.from(Array(3).keys())console.log(list);// affiche [ 0, 1, 2 ]

On peut utiliser une fonction flechee (a voir dans une prochaine section) pour modifier lesvaleurs generees

var list: number[] = Array.from({ length: 3 }, (v, k) => k + 1)console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 18 / 142

Page 30: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Remarques

En JavaScript, il n’y a pas de methode range pour generer un tableau contenant unintervalle de valeurs entieres consecutives.

Avec EcmaScript 6, on peut utiliser des methodes comme from et keys pour generer unintervalle de valeurs entieres consecutives.

Exemple

var list: number[] = Array.from(Array(3).keys())console.log(list);// affiche [ 0, 1, 2 ]

On peut utiliser une fonction flechee (a voir dans une prochaine section) pour modifier lesvaleurs generees

var list: number[] = Array.from({ length: 3 }, (v, k) => k + 1)console.log(list);// affiche [ 1, 2, 3 ]

H & H: Research and Training 18 / 142

Page 31: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les tuples, on initialise toutes les valeurs a la declaration

var t: [number, string, string] = [ 100, "wick", ’john’ ];

Pour acceder a un element d’un tuple en lecture ou en ecriture

console.log(t[0]);// affiche 100

t[2] = "travolta";console.log(t);// affiche [ 100, ’wick’, ’travolta’ ]

Cependant, ceci genere une erreur

t = [100, 200, ’john’];

H & H: Research and Training 19 / 142

Page 32: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les tuples, on initialise toutes les valeurs a la declaration

var t: [number, string, string] = [ 100, "wick", ’john’ ];

Pour acceder a un element d’un tuple en lecture ou en ecriture

console.log(t[0]);// affiche 100

t[2] = "travolta";console.log(t);// affiche [ 100, ’wick’, ’travolta’ ]

Cependant, ceci genere une erreur

t = [100, 200, ’john’];

H & H: Research and Training 19 / 142

Page 33: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour les tuples, on initialise toutes les valeurs a la declaration

var t: [number, string, string] = [ 100, "wick", ’john’ ];

Pour acceder a un element d’un tuple en lecture ou en ecriture

console.log(t[0]);// affiche 100

t[2] = "travolta";console.log(t);// affiche [ 100, ’wick’, ’travolta’ ]

Cependant, ceci genere une erreur

t = [100, 200, ’john’];

H & H: Research and Training 19 / 142

Page 34: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Avec TypeScript 3.0, on peut rendre certains elements de tuple optionnels

var t: [number, string?, string?] = [100];console.log(t);// affiche [ 100 ]console.log(t[1]);// affiche undefined

Pour ajouter un element

t[1] = ’wick’;

Ceci genere une erreur

t[2] = 100;

Et cette instruction aussi car on depasse la taille du tuple

t[3] = 100;

H & H: Research and Training 20 / 142

Page 35: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Avec TypeScript 3.0, on peut rendre certains elements de tuple optionnels

var t: [number, string?, string?] = [100];console.log(t);// affiche [ 100 ]console.log(t[1]);// affiche undefined

Pour ajouter un element

t[1] = ’wick’;

Ceci genere une erreur

t[2] = 100;

Et cette instruction aussi car on depasse la taille du tuple

t[3] = 100;

H & H: Research and Training 20 / 142

Page 36: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Avec TypeScript 3.0, on peut rendre certains elements de tuple optionnels

var t: [number, string?, string?] = [100];console.log(t);// affiche [ 100 ]console.log(t[1]);// affiche undefined

Pour ajouter un element

t[1] = ’wick’;

Ceci genere une erreur

t[2] = 100;

Et cette instruction aussi car on depasse la taille du tuple

t[3] = 100;

H & H: Research and Training 20 / 142

Page 37: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Avec TypeScript 3.0, on peut rendre certains elements de tuple optionnels

var t: [number, string?, string?] = [100];console.log(t);// affiche [ 100 ]console.log(t[1]);// affiche undefined

Pour ajouter un element

t[1] = ’wick’;

Ceci genere une erreur

t[2] = 100;

Et cette instruction aussi car on depasse la taille du tuple

t[3] = 100;

H & H: Research and Training 20 / 142

Page 38: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Exemple avec any

var x: any;x = "bonjour";x = 5;console.log(x);// affiche 5;

Une variable de type any peut etre affectee a n’importe quel autretype de variable

var x: any;x = "bonjour";x = 5;var y: number = x;

H & H: Research and Training 21 / 142

Page 39: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Exemple avec any

var x: any;x = "bonjour";x = 5;console.log(x);// affiche 5;

Une variable de type any peut etre affectee a n’importe quel autretype de variable

var x: any;x = "bonjour";x = 5;var y: number = x;

H & H: Research and Training 21 / 142

Page 40: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Le type unknown (TypeScript 3.0) fonctionne comme any mais nepeut etre affecte qu’a une variable de type unknown ou any

var x: unknown;x = "bonjour";x = 5;console.log(x);// affiche 5;

Ceci genere donc une erreur

var x: unknown;x = "bonjour";x = 5;var y: number = x;

H & H: Research and Training 22 / 142

Page 41: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

Le type unknown (TypeScript 3.0) fonctionne comme any mais nepeut etre affecte qu’a une variable de type unknown ou any

var x: unknown;x = "bonjour";x = 5;console.log(x);// affiche 5;

Ceci genere donc une erreur

var x: unknown;x = "bonjour";x = 5;var y: number = x;

H & H: Research and Training 22 / 142

Page 42: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Declarons une enumeration (dans file.ts)

enum mois { JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET,AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

L’indice du premier element est 0

console.log(mois.AVRIL)// affiche 3

Pour modifier l’indice du premier element

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

En affichant maintenant, le resultat est

console.log(mois.AVRIL)// affiche 4

H & H: Research and Training 23 / 142

Page 43: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Declarons une enumeration (dans file.ts)

enum mois { JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET,AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

L’indice du premier element est 0

console.log(mois.AVRIL)// affiche 3

Pour modifier l’indice du premier element

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

En affichant maintenant, le resultat est

console.log(mois.AVRIL)// affiche 4

H & H: Research and Training 23 / 142

Page 44: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Declarons une enumeration (dans file.ts)

enum mois { JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET,AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

L’indice du premier element est 0

console.log(mois.AVRIL)// affiche 3

Pour modifier l’indice du premier element

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

En affichant maintenant, le resultat est

console.log(mois.AVRIL)// affiche 4

H & H: Research and Training 23 / 142

Page 45: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

Declarons une enumeration (dans file.ts)

enum mois { JANVIER, FEVRIER, MARS, AVRIL, MAI, JUIN, JUILLET,AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

L’indice du premier element est 0

console.log(mois.AVRIL)// affiche 3

Pour modifier l’indice du premier element

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE, DECEMBRE };

En affichant maintenant, le resultat est

console.log(mois.AVRIL)// affiche 4

H & H: Research and Training 23 / 142

Page 46: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptOn peut aussi modifier plusieurs indices simultanement

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL = 10, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE = 2, DECEMBRE };

En affichant, le resultat est

console.log(mois.MARS);// affiche 3console.log(mois.JUIN);// affiche 12console.log(mois.DECEMBRE);// affiche 3

Ceci est une erreur, on ne peut modifier une constante

mois.JANVIER = 3;

H & H: Research and Training 24 / 142

Page 47: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptOn peut aussi modifier plusieurs indices simultanement

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL = 10, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE = 2, DECEMBRE };

En affichant, le resultat est

console.log(mois.MARS);// affiche 3console.log(mois.JUIN);// affiche 12console.log(mois.DECEMBRE);// affiche 3

Ceci est une erreur, on ne peut modifier une constante

mois.JANVIER = 3;

H & H: Research and Training 24 / 142

Page 48: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptOn peut aussi modifier plusieurs indices simultanement

enum mois { JANVIER = 1, FEVRIER, MARS, AVRIL = 10, MAI, JUIN,JUILLET, AOUT, SEPTEMBRE, OCTOBRE, NOVEMBRE = 2, DECEMBRE };

En affichant, le resultat est

console.log(mois.MARS);// affiche 3console.log(mois.JUIN);// affiche 12console.log(mois.DECEMBRE);// affiche 3

Ceci est une erreur, on ne peut modifier une constante

mois.JANVIER = 3;

H & H: Research and Training 24 / 142

Page 49: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour declarer un objet

var obj: {nom: string;numero: number;

};

On peut initialiser les attributs de cet objet

obj = {nom: ’wick’,numero: 100

};

console.log(obj);// affiche { nom: ’wick’, numero: 100 }

console.log(typeof obj);// affiche object

H & H: Research and Training 25 / 142

Page 50: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScriptPour declarer un objet

var obj: {nom: string;numero: number;

};

On peut initialiser les attributs de cet objet

obj = {nom: ’wick’,numero: 100

};

console.log(obj);// affiche { nom: ’wick’, numero: 100 }

console.log(typeof obj);// affiche object

H & H: Research and Training 25 / 142

Page 51: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

On peut modifier les valeurs d’un objet ainsi

obj.nom = ’abruzzi’;obj[’numero’] = 200;

console.log(obj);

Ceci est une erreur

obj.nom = 125;

H & H: Research and Training 26 / 142

Page 52: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Declaration

TypeScript

On peut modifier les valeurs d’un objet ainsi

obj.nom = ’abruzzi’;obj[’numero’] = 200;

console.log(obj);

Ceci est une erreur

obj.nom = 125;

H & H: Research and Training 26 / 142

Page 53: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Union de type

TypeScriptUnion de type

Il est possible d’autoriser plusieurs types de valeurs pour une variable

Declarer une variable acceptant plusieurs types de valeur

var y: number | boolean | string;

affecter des valeurs de type different

y = 2;y = "bonjour";y = false;

Ceci genere une erreur

y = [2, 5];

H & H: Research and Training 27 / 142

Page 54: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Union de type

TypeScriptUnion de type

Il est possible d’autoriser plusieurs types de valeurs pour une variable

Declarer une variable acceptant plusieurs types de valeur

var y: number | boolean | string;

affecter des valeurs de type different

y = 2;y = "bonjour";y = false;

Ceci genere une erreur

y = [2, 5];

H & H: Research and Training 27 / 142

Page 55: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Union de type

TypeScriptUnion de type

Il est possible d’autoriser plusieurs types de valeurs pour une variable

Declarer une variable acceptant plusieurs types de valeur

var y: number | boolean | string;

affecter des valeurs de type different

y = 2;y = "bonjour";y = false;

Ceci genere une erreur

y = [2, 5];

H & H: Research and Training 27 / 142

Page 56: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Union de type

TypeScriptUnion de type

Il est possible d’autoriser plusieurs types de valeurs pour une variable

Declarer une variable acceptant plusieurs types de valeur

var y: number | boolean | string;

affecter des valeurs de type different

y = 2;y = "bonjour";y = false;

Ceci genere une erreur

y = [2, 5];

H & H: Research and Training 27 / 142

Page 57: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Variable locale

TypeScript

Le mot-cle let

permet de donner une visibilite locale a une variable declaree dans unbloc.

Ceci genere une erreur car la variable x a une visibilite localelimitee au bloc if

if (5 > 2){let x = 1;

}console.log(x);// affiche ReferenceError: x is not defined

H & H: Research and Training 28 / 142

Page 58: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Variable locale

TypeScript

Le mot-cle let

permet de donner une visibilite locale a une variable declaree dans unbloc.

Ceci genere une erreur car la variable x a une visibilite localelimitee au bloc if

if (5 > 2){let x = 1;

}console.log(x);// affiche ReferenceError: x is not defined

H & H: Research and Training 28 / 142

Page 59: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Cast

TypeScript

Premier exemple

let str: any = "bonjour";let longueur: number = (<string>str).length;

console.log(longueur);// affiche 7

Deuxieme exemple

let str: any = "bonjour";let longueur: number = (str as string).length;

console.log(longueur);// affiche 7

H & H: Research and Training 29 / 142

Page 60: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Cast

TypeScript

Premier exemple

let str: any = "bonjour";let longueur: number = (<string>str).length;

console.log(longueur);// affiche 7

Deuxieme exemple

let str: any = "bonjour";let longueur: number = (str as string).length;

console.log(longueur);// affiche 7

H & H: Research and Training 29 / 142

Page 61: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Conversion

TypeScript

Pour convertir une chaıne de caractere en nombre

let x : string = "2";let y: string = "3.5";

let a: number = Number(x);let b: number = Number(y);

console.log(a);// affiche 2

console.log(b);// affiche 3.5

Il existe une fonction de conversion pour chaque type

H & H: Research and Training 30 / 142

Page 62: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Conversion

TypeScript

Pour convertir une chaıne de caractere en nombre

let x : string = "2";let y: string = "3.5";

let a: number = Number(x);let b: number = Number(y);

console.log(a);// affiche 2

console.log(b);// affiche 3.5

Il existe une fonction de conversion pour chaque typeH & H: Research and Training 30 / 142

Page 63: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Alias de type

TypeScript

Le mot-cle type permet de definir un alias de type

type maStructure = [number, string, string];

Ensuite, on peut utiliser maStructure comme un type

let first: maStructure = [100, "wick", ’john’ ];

console.log(first);// affiche [ 100, ’wick’, ’john’ ]

H & H: Research and Training 31 / 142

Page 64: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Alias de type

TypeScript

Le mot-cle type permet de definir un alias de type

type maStructure = [number, string, string];

Ensuite, on peut utiliser maStructure comme un type

let first: maStructure = [100, "wick", ’john’ ];

console.log(first);// affiche [ 100, ’wick’, ’john’ ]

H & H: Research and Training 31 / 142

Page 65: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Variable Nullish Coalescing (Coalescence nulle)

TypeScript

L’operateur ?? permet d’eviter d’affecter la valeur null ouundefined a une variable

var obj = {nom: null, prenom: ’john’};let nom: string = obj.nom ?? ’doe’;console.log(nom);// affiche doe

C’est equivalent a

var obj = {nom: null, prenom: ’john’};let nom: string = (obj.nom !== null && obj.nom !==

undefined) ? obj.nom : ’doe’;console.log(nom);// affiche doe

H & H: Research and Training 32 / 142

Page 66: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScript

Les constantes

se declare avec le mot-cle const

permet a une variable de ne pas changer de valeur

Ceci genere une erreur car une constante ne peut changer devaleur

const X: any = 5;X = "bonjour";// affiche TypeError: Assignment to constant

variable.

H & H: Research and Training 33 / 142

Page 67: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScript

Les constantes

se declare avec le mot-cle const

permet a une variable de ne pas changer de valeur

Ceci genere une erreur car une constante ne peut changer devaleur

const X: any = 5;X = "bonjour";// affiche TypeError: Assignment to constant

variable.

H & H: Research and Training 33 / 142

Page 68: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScriptAvec TypeScript 3.4, on peut definir une constante avec une assertionsans preciser le type

let X = "bonjour" as const;

console.log(X);// affiche bonjour

console.log(typeof X);// affiche string

let Y: string = "bonjour";console.log(X == y);//affiche true

Ceci genere une erreur car une constante ne peut changer de valeur

X = "hello";

H & H: Research and Training 34 / 142

Page 69: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScriptAvec TypeScript 3.4, on peut definir une constante avec une assertionsans preciser le type

let X = "bonjour" as const;

console.log(X);// affiche bonjour

console.log(typeof X);// affiche string

let Y: string = "bonjour";console.log(X == y);//affiche true

Ceci genere une erreur car une constante ne peut changer de valeur

X = "hello";

H & H: Research and Training 34 / 142

Page 70: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScriptAvec TypeScript 3.4, on peut aussi definir une constante ainsi

let X = <const>"bonjour";

console.log(X);// affiche bonjour

console.log(typeof X);// affiche string

let y: string = "bonjour";console.log(X == y);//affiche true

Ceci genere une erreur car une constante ne peut changer de valeur

X = "hello";

H & H: Research and Training 35 / 142

Page 71: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Constante

TypeScriptAvec TypeScript 3.4, on peut aussi definir une constante ainsi

let X = <const>"bonjour";

console.log(X);// affiche bonjour

console.log(typeof X);// affiche string

let y: string = "bonjour";console.log(X == y);//affiche true

Ceci genere une erreur car une constante ne peut changer de valeur

X = "hello";

H & H: Research and Training 35 / 142

Page 72: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScriptDeclarer une fonction

function nomFonction([les parametres]){les instructions de la fonction

}

Exemple

function somme(a: number, b: number): number {return a + b;

}

Appeler une fonction

let resultat: number = somme (1, 3);console.log(resultat);// affiche 4

H & H: Research and Training 36 / 142

Page 73: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScriptDeclarer une fonction

function nomFonction([les parametres]){les instructions de la fonction

}

Exemple

function somme(a: number, b: number): number {return a + b;

}

Appeler une fonction

let resultat: number = somme (1, 3);console.log(resultat);// affiche 4

H & H: Research and Training 36 / 142

Page 74: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScriptDeclarer une fonction

function nomFonction([les parametres]){les instructions de la fonction

}

Exemple

function somme(a: number, b: number): number {return a + b;

}

Appeler une fonction

let resultat: number = somme (1, 3);console.log(resultat);// affiche 4

H & H: Research and Training 36 / 142

Page 75: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScript

Le code suivant genere une erreur

function somme(a: number, b: number): string {return a + b;

}

Celui-ci aussi

let resultat: number = somme ("1", 3);

Et meme celui-ci

let resultat: string = somme(1, 3);

H & H: Research and Training 37 / 142

Page 76: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScript

Le code suivant genere une erreur

function somme(a: number, b: number): string {return a + b;

}

Celui-ci aussi

let resultat: number = somme ("1", 3);

Et meme celui-ci

let resultat: string = somme(1, 3);

H & H: Research and Training 37 / 142

Page 77: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScript

Le code suivant genere une erreur

function somme(a: number, b: number): string {return a + b;

}

Celui-ci aussi

let resultat: number = somme ("1", 3);

Et meme celui-ci

let resultat: string = somme(1, 3);

H & H: Research and Training 37 / 142

Page 78: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScript

Une fonction qui ne retourne rien a le type void

function direBonjour(): void {console.log("bonjour");

}

Une fonction qui n’atteint jamais sa fin a le type never

function boucleInfinie(): never {while (true){

}}

H & H: Research and Training 38 / 142

Page 79: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Declaration et appel

TypeScript

Une fonction qui ne retourne rien a le type void

function direBonjour(): void {console.log("bonjour");

}

Une fonction qui n’atteint jamais sa fin a le type never

function boucleInfinie(): never {while (true){

}}

H & H: Research and Training 38 / 142

Page 80: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres par defaut

TypeScript

Il est possible d’attribuer une valeur par defaut aux parametresd’une fonction

function division(x: number, y: number = 1) : number{return x / y;

}

console.log(division(10));// affiche 10

console.log(division(10, 2));// affiche 5

H & H: Research and Training 39 / 142

Page 81: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres par defaut

TypeScript

Il est possible d’attribuer une valeur par defaut aux parametresd’une fonction

function division(x: number, y: number = 1) : number{return x / y;

}

console.log(division(10));// affiche 10

console.log(division(10, 2));// affiche 5

H & H: Research and Training 39 / 142

Page 82: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres optionnels

TypeScript

Il est possible de rendre certains parametres d’une fonctionoptionnels

function division(x: number, y?: number): number {if(y)

return x / y;return x;

}

console.log(division(10));// affiche 10

console.log(division(10, 2));// affiche 5

H & H: Research and Training 40 / 142

Page 83: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres optionnels

TypeScript

Il est possible de rendre certains parametres d’une fonctionoptionnels

function division(x: number, y?: number): number {if(y)

return x / y;return x;

}

console.log(division(10));// affiche 10

console.log(division(10, 2));// affiche 5

H & H: Research and Training 40 / 142

Page 84: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres restants

TypeScript

Il est possible de definir une fonction prenant un nombre indefini deparametres

function somme(x: number, ...tab: number[]): number {for (let elt of tab)

x += elt;return x;

}

console.log(somme(10));// affiche 10

console.log(somme(10, 5));// affiche 15

console.log(somme(10, 1, 6));// affiche 17

H & H: Research and Training 41 / 142

Page 85: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres restants

TypeScript

Il est possible de definir une fonction prenant un nombre indefini deparametres

function somme(x: number, ...tab: number[]): number {for (let elt of tab)

x += elt;return x;

}

console.log(somme(10));// affiche 10

console.log(somme(10, 5));// affiche 15

console.log(somme(10, 1, 6));// affiche 17

H & H: Research and Training 41 / 142

Page 86: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres a plusieurs types autorises

TypeScript

Il est possible d’autoriser plusieurs types pour un parametre

function stringOrNumber(param1: string | number,param2: number): number {if (typeof param1 == "string")

return param1.length + param2;return param1 + param2;

}

console.log(stringOrNumber("bonjour", 3));// affiche 10

console.log(stringOrNumber(5, 3));// affiche 8

H & H: Research and Training 42 / 142

Page 87: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres a plusieurs types autorises

TypeScript

Il est possible d’autoriser plusieurs types pour un parametre

function stringOrNumber(param1: string | number,param2: number): number {if (typeof param1 == "string")

return param1.length + param2;return param1 + param2;

}

console.log(stringOrNumber("bonjour", 3));// affiche 10

console.log(stringOrNumber(5, 3));// affiche 8

H & H: Research and Training 42 / 142

Page 88: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres en lecture seule

TypeScriptLe mot-cle ReadonlyArray (TypeScript 3.4) indique qu’un parametre de typetableau est en lecture seule (non-modifiable)

function incrementAll(tab: ReadonlyArray<number>): void {for (let i = 0; i < tab.length; i++){// la ligne suivante genere une erreurtab[i]++;

}}

On peut aussi utiliser le mot-cle readonly qui s’applique sur les tableaux et lestuples

function incrementAll(tab: readonly number[]): void {for (let i = 0; i < tab.length; i++){

// la ligne suivante genere une erreurtab[i]++;

}}

H & H: Research and Training 43 / 142

Page 89: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Parametres en lecture seule

TypeScriptLe mot-cle ReadonlyArray (TypeScript 3.4) indique qu’un parametre de typetableau est en lecture seule (non-modifiable)

function incrementAll(tab: ReadonlyArray<number>): void {for (let i = 0; i < tab.length; i++){// la ligne suivante genere une erreurtab[i]++;

}}

On peut aussi utiliser le mot-cle readonly qui s’applique sur les tableaux et lestuples

function incrementAll(tab: readonly number[]): void {for (let i = 0; i < tab.length; i++){// la ligne suivante genere une erreurtab[i]++;

}}

H & H: Research and Training 43 / 142

Page 90: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScriptIl est possible de declarer une fonction en utilisant les expressions flechees

let nomFonction = ([les parametres]): typeValeurRetour => {les instructions de la fonction

}

Exemple

let somme = (a: number, b: number): number => { return a + b; }

Ou en plus simple

let somme = (a: number, b: number): number => a + b;

Appeler une fonction flechee

let resultat: number = somme (1, 3);

H & H: Research and Training 44 / 142

Page 91: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScriptIl est possible de declarer une fonction en utilisant les expressions flechees

let nomFonction = ([les parametres]): typeValeurRetour => {les instructions de la fonction

}

Exemple

let somme = (a: number, b: number): number => { return a + b; }

Ou en plus simple

let somme = (a: number, b: number): number => a + b;

Appeler une fonction flechee

let resultat: number = somme (1, 3);

H & H: Research and Training 44 / 142

Page 92: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScriptIl est possible de declarer une fonction en utilisant les expressions flechees

let nomFonction = ([les parametres]): typeValeurRetour => {les instructions de la fonction

}

Exemple

let somme = (a: number, b: number): number => { return a + b; }

Ou en plus simple

let somme = (a: number, b: number): number => a + b;

Appeler une fonction flechee

let resultat: number = somme (1, 3);

H & H: Research and Training 44 / 142

Page 93: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScriptIl est possible de declarer une fonction en utilisant les expressions flechees

let nomFonction = ([les parametres]): typeValeurRetour => {les instructions de la fonction

}

Exemple

let somme = (a: number, b: number): number => { return a + b; }

Ou en plus simple

let somme = (a: number, b: number): number => a + b;

Appeler une fonction flechee

let resultat: number = somme (1, 3);

H & H: Research and Training 44 / 142

Page 94: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Cas d’une fonction flechee a un seul parametre

let carre = (a: number): number => a * a;console.log(carre(2)); // affiche 4

Sans typage, la fonction peut etre ecrite ainsi

let carre = a => a * a;console.log(carre(2)); // affiche 4

Declaration d’une fonction flechee sans parametre

let sayHello = (): void => console.log(’Hello’);sayHello(); // affiche Hello

H & H: Research and Training 45 / 142

Page 95: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Cas d’une fonction flechee a un seul parametre

let carre = (a: number): number => a * a;console.log(carre(2)); // affiche 4

Sans typage, la fonction peut etre ecrite ainsi

let carre = a => a * a;console.log(carre(2)); // affiche 4

Declaration d’une fonction flechee sans parametre

let sayHello = (): void => console.log(’Hello’);sayHello(); // affiche Hello

H & H: Research and Training 45 / 142

Page 96: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Cas d’une fonction flechee a un seul parametre

let carre = (a: number): number => a * a;console.log(carre(2)); // affiche 4

Sans typage, la fonction peut etre ecrite ainsi

let carre = a => a * a;console.log(carre(2)); // affiche 4

Declaration d’une fonction flechee sans parametre

let sayHello = (): void => console.log(’Hello’);sayHello(); // affiche Hello

H & H: Research and Training 45 / 142

Page 97: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Remarque

Il est deconseille d’utiliser les fonctions flechees dans un objet

Le mot-cle this est inutilisable dans les fonctions flechees

Sans les fonctions flechees

let obj = {nom: ’wick’,afficherNom: function() {console.log(this.nom)

}}obj.afficherNom();// affiche wick

Avec les fonctions flechees

let obj = {nom: ’wick’,afficherNom: () => {

console.log(this.nom)}

}obj.afficherNom();// affiche undefined

H & H: Research and Training 46 / 142

Page 98: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Remarque

Il est deconseille d’utiliser les fonctions flechees dans un objet

Le mot-cle this est inutilisable dans les fonctions flechees

Sans les fonctions flechees

let obj = {nom: ’wick’,afficherNom: function() {console.log(this.nom)

}}obj.afficherNom();// affiche wick

Avec les fonctions flechees

let obj = {nom: ’wick’,afficherNom: () => {

console.log(this.nom)}

}obj.afficherNom();// affiche undefined

H & H: Research and Training 46 / 142

Page 99: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Les fonctions flechees sont utilisees pour realiser les operationssuivant sur les tableaux

forEach() : pour parcourir un tableau

map() : pour appliquer une fonction sur les elements d’un tableau

filter() : pour filtrer les elements d’un tableau selon un criteredefini sous forme d’une fonction anonyme ou flechee

reduce() : pour reduire tous les elements d’un tableau en unseul selon une regle definie dans une fonction anonyme ouflechee

...

H & H: Research and Training 47 / 142

Page 100: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

Utiliser forEach pour afficher le contenu d’un tableau

var tab = [2, 3, 5];tab.forEach(elt => console.log(elt));// affiche 2 3 5

Dans forEach, on peut aussi appeler une fonction afficher

tab.forEach(elt => afficher(elt));

function afficher(value) {console.log(value);

}// affiche 2 3 5

On peut simplifier l’ecriture precedente en utilisant les callback

tab.forEach(afficher);

function afficher(value) {console.log(value);

}// affiche 2 3 5

H & H: Research and Training 48 / 142

Page 101: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

Utiliser forEach pour afficher le contenu d’un tableau

var tab = [2, 3, 5];tab.forEach(elt => console.log(elt));// affiche 2 3 5

Dans forEach, on peut aussi appeler une fonction afficher

tab.forEach(elt => afficher(elt));

function afficher(value) {console.log(value);

}// affiche 2 3 5

On peut simplifier l’ecriture precedente en utilisant les callback

tab.forEach(afficher);

function afficher(value) {console.log(value);

}// affiche 2 3 5

H & H: Research and Training 48 / 142

Page 102: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

Utiliser forEach pour afficher le contenu d’un tableau

var tab = [2, 3, 5];tab.forEach(elt => console.log(elt));// affiche 2 3 5

Dans forEach, on peut aussi appeler une fonction afficher

tab.forEach(elt => afficher(elt));

function afficher(value) {console.log(value);

}// affiche 2 3 5

On peut simplifier l’ecriture precedente en utilisant les callback

tab.forEach(afficher);

function afficher(value) {console.log(value);

}// affiche 2 3 5

H & H: Research and Training 48 / 142

Page 103: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

La fonction afficher peut accepter deux parametres : le premierest la valeur de l’iteration courante et le deuxieme est son indicedans le tableau

tab.forEach(afficher);

function afficher(value, key) {console.log(key, value);

}

/* affiche0 21 32 5

*/

H & H: Research and Training 49 / 142

Page 104: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

La fonction afficher peut accepter un troisieme parametre quicorrespond au tableau

tab.forEach(afficher);

function afficher(value, key, t) {console.log(key, value, t);

}

/* affiche0 2 [ 2, 3, 5 ]1 3 [ 2, 3, 5 ]2 5 [ 2, 3, 5 ]

*/

H & H: Research and Training 50 / 142

Page 105: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

On peut utiliser map pour effecteur un traitement sur chaqueelement du tableau puis forEach pour afficher le nouveautableau

tab.map(elt => elt + 3).forEach(elt => console.log(elt));

// affiche 5 6 8

On peut aussi utiliser filter pour filtrer des elements

tab.map(elt => elt + 3).filter(elt => elt > 5).forEach(elt => console.log(elt));

// affiche 6 8

H & H: Research and Training 51 / 142

Page 106: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

On peut utiliser map pour effecteur un traitement sur chaqueelement du tableau puis forEach pour afficher le nouveautableau

tab.map(elt => elt + 3).forEach(elt => console.log(elt));

// affiche 5 6 8

On peut aussi utiliser filter pour filtrer des elements

tab.map(elt => elt + 3).filter(elt => elt > 5).forEach(elt => console.log(elt));

// affiche 6 8

H & H: Research and Training 51 / 142

Page 107: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Remarque

Attention, selon l’ordre d’appel de ces methodes, le resultat peut changer.

Exemple avec reduce : permet de reduire les elements d’un tableau enune seule valeur

var tab = [2, 3, 5];var somme = tab.map(elt => elt + 3)

.filter(elt => elt > 5)

.reduce((sum, elt) => sum + elt);

console.log(somme);// affiche 14

H & H: Research and Training 52 / 142

Page 108: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Remarque

Attention, selon l’ordre d’appel de ces methodes, le resultat peut changer.

Exemple avec reduce : permet de reduire les elements d’un tableau enune seule valeur

var tab = [2, 3, 5];var somme = tab.map(elt => elt + 3)

.filter(elt => elt > 5)

.reduce((sum, elt) => sum + elt);

console.log(somme);// affiche 14

H & H: Research and Training 52 / 142

Page 109: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Si on a plusieurs instructions, on doit ajouter les accolades

var tab = [2, 3, 5];var somme = tab.map(elt => elt + 3)

.filter(elt => elt > 5)

.reduce((sum, elt) => {return sum + elt;

});

console.log(somme);// affiche 14

H & H: Research and Training 53 / 142

Page 110: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Remarques

Le premier parametre de reduce correspond au resultat del’iteration precedente

Le deuxieme correspond a l’element du tableau de l’iterationcourante

Le premier parametre est initialise par la valeur du premierelement du tableau

On peut changer la valeur initiale du premier parametre enl’ajoutant a la fin de la methode

H & H: Research and Training 54 / 142

Page 111: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Dans cet exemple, on initialise le premier parametre de reducepar la valeur 0

var somme = tab.map(elt => elt + 3).filter(elt => elt > 5).reduce((sum, elt) => sum + elt, 0);

console.log(somme);// affiche 14

H & H: Research and Training 55 / 142

Page 112: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Fonction Fonctions flechees (arrow function)

TypeScript

Fonctions flechees : pourquoi?

Simplicite d’ecriture du code⇒ meilleure lisibilite

Pas de binding avec les objets predefinis : arguments, this...

...

H & H: Research and Training 56 / 142

Page 113: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

Considerons la fonction somme suivante

function somme(a?: number, b?: number, c?: number): number {return a + b + c;

}

Pour appeler la fonction somme, il faut lui passer trois parametres number

console.log(somme (1, 3, 5));// affiche 9

Et si les valeurs se trouvent dans un tableau, on peut utiliser la decomposition

let t: Array<number> = [1, 3, 5];console.log(somme(...t));

On peut utiliser partiellement la decomposition

let t: Array<number> = [1, 3];console.log(somme(...t, 5));

H & H: Research and Training 57 / 142

Page 114: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

Considerons la fonction somme suivante

function somme(a?: number, b?: number, c?: number): number {return a + b + c;

}

Pour appeler la fonction somme, il faut lui passer trois parametres number

console.log(somme (1, 3, 5));// affiche 9

Et si les valeurs se trouvent dans un tableau, on peut utiliser la decomposition

let t: Array<number> = [1, 3, 5];console.log(somme(...t));

On peut utiliser partiellement la decomposition

let t: Array<number> = [1, 3];console.log(somme(...t, 5));

H & H: Research and Training 57 / 142

Page 115: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

Considerons la fonction somme suivante

function somme(a?: number, b?: number, c?: number): number {return a + b + c;

}

Pour appeler la fonction somme, il faut lui passer trois parametres number

console.log(somme (1, 3, 5));// affiche 9

Et si les valeurs se trouvent dans un tableau, on peut utiliser la decomposition

let t: Array<number> = [1, 3, 5];console.log(somme(...t));

On peut utiliser partiellement la decomposition

let t: Array<number> = [1, 3];console.log(somme(...t, 5));

H & H: Research and Training 57 / 142

Page 116: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

Considerons la fonction somme suivante

function somme(a?: number, b?: number, c?: number): number {return a + b + c;

}

Pour appeler la fonction somme, il faut lui passer trois parametres number

console.log(somme (1, 3, 5));// affiche 9

Et si les valeurs se trouvent dans un tableau, on peut utiliser la decomposition

let t: Array<number> = [1, 3, 5];console.log(somme(...t));

On peut utiliser partiellement la decomposition

let t: Array<number> = [1, 3];console.log(somme(...t, 5));

H & H: Research and Training 57 / 142

Page 117: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

TypeScript

Considerons les deux objets suivants

let obj = { nom: ’wick’, prenom: ’john’};let obj2 = obj;

Modifier l’un⇒ modifier l’autre

obj2.nom = ’abruzzi’;console.log(obj);// affiche { nom: ’abruzzi’, prenom: ’john’ }

console.log(obj2);// affiche { nom: ’abruzzi’, prenom: ’john’ }

H & H: Research and Training 58 / 142

Page 118: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

TypeScript

Considerons les deux objets suivants

let obj = { nom: ’wick’, prenom: ’john’};let obj2 = obj;

Modifier l’un⇒ modifier l’autre

obj2.nom = ’abruzzi’;console.log(obj);// affiche { nom: ’abruzzi’, prenom: ’john’ }

console.log(obj2);// affiche { nom: ’abruzzi’, prenom: ’john’ }

H & H: Research and Training 58 / 142

Page 119: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Concept de decomposition (spread)

TypeScript

Pour que les deux objets soient independants, on peut utiliser ladecomposition pour faire le clonage

let obj = { nom: ’wick’, prenom: ’john’};let obj2 = { ...obj };obj2.nom = ’abruzzi’;

console.log(obj);// affiche { nom: ’wick’, prenom: ’john’ }

console.log(obj2);// affiche { nom: ’abruzzi’, prenom: ’john’ }

H & H: Research and Training 59 / 142

Page 120: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScript

Particularite

Avec TypeScript, on peut utiliser des elements definis dans unautre fichier : une variable, une fonction, une classe, uneinterface...

Pour cela, il faut l’importer la ou on a besoin de l’utiliser

Pour importer un element, il faut l’exporter dans le fichier source

En transpilant le fichier contenant les import, les fichierscontenant les elements importes seront aussi transpiles.

H & H: Research and Training 60 / 142

Page 121: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScript

Etant donne le fichier fonctions.ts dont le contenu est

function somme(a: number = 0, b: number = 0) {return a + b;

}

function produit(a: number = 0, b: number = 1) {return a * b;

}

H & H: Research and Training 61 / 142

Page 122: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptPour exporter les deux fonctions somme et produit de fonction.ts

export function somme(a: number = 0, b: number = 0) {return a + b;

}

export function produit(a: number = 0, b: number = 1) {return a * b;

}

Ou aussi

function somme(a:number = 0, b:number = 0) {return a + b;

}

function produit(a: number = 0, b: number = 1) {return a * b;

}export { somme, produit };

H & H: Research and Training 62 / 142

Page 123: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptPour exporter les deux fonctions somme et produit de fonction.ts

export function somme(a: number = 0, b: number = 0) {return a + b;

}

export function produit(a: number = 0, b: number = 1) {return a * b;

}

Ou aussi

function somme(a:number = 0, b:number = 0) {return a + b;

}

function produit(a: number = 0, b: number = 1) {return a * b;

}export { somme, produit };

H & H: Research and Training 62 / 142

Page 124: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScript

Pour importer et utiliser une fonction

import { somme } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

On peut aussi utiliser des alias

import { somme as s } from ’./fonctions’;

console.log(s(2, 5));// affiche 7

H & H: Research and Training 63 / 142

Page 125: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScript

Pour importer et utiliser une fonction

import { somme } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

On peut aussi utiliser des alias

import { somme as s } from ’./fonctions’;

console.log(s(2, 5));// affiche 7

H & H: Research and Training 63 / 142

Page 126: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptPour importer plusieurs elements

import { somme, produit } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

console.log(produit(2, 5));// affiche 10

Pour importer plusieurs elements

import * as f from ’./fonctions’;

console.log(f.somme(2, 5));// affiche 7

console.log(f.produit(2, 5));// affiche 10

H & H: Research and Training 64 / 142

Page 127: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptPour importer plusieurs elements

import { somme, produit } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

console.log(produit(2, 5));// affiche 10

Pour importer plusieurs elements

import * as f from ’./fonctions’;

console.log(f.somme(2, 5));// affiche 7

console.log(f.produit(2, 5));// affiche 10

H & H: Research and Training 64 / 142

Page 128: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptOn peut aussi donner des alias pendant l’export

function somme(a:number = 0, b:number = 0) {return a + b;

}

function produit(a: number = 0, b: number = 1) {return a * b;

}export { produit as p, somme as s } ;

Pour importer

import * as f from ’./fonctions’;

console.log(f.s(2, 5));// affiche 7

console.log(f.p(2, 5));// affiche 10

H & H: Research and Training 65 / 142

Page 129: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptOn peut aussi donner des alias pendant l’export

function somme(a:number = 0, b:number = 0) {return a + b;

}

function produit(a: number = 0, b: number = 1) {return a * b;

}export { produit as p, somme as s } ;

Pour importer

import * as f from ’./fonctions’;

console.log(f.s(2, 5));// affiche 7

console.log(f.p(2, 5));// affiche 10

H & H: Research and Training 65 / 142

Page 130: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptOn peut aussi utiliser le export default (un seul par fichier)

export default function somme(a:number = 0, b:number = 0) {return a + b;

}

export function produit(a: number = 0, b: number = 1) {return a * b;

}

Pour importer, pas besoin de { } pour les elements exporter par defaut

import somme from ’./fonctions’;import { produit } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

console.log(produit(2, 5));// affiche 10

H & H: Research and Training 66 / 142

Page 131: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScriptOn peut aussi utiliser le export default (un seul par fichier)

export default function somme(a:number = 0, b:number = 0) {return a + b;

}

export function produit(a: number = 0, b: number = 1) {return a * b;

}

Pour importer, pas besoin de { } pour les elements exporter par defaut

import somme from ’./fonctions’;import { produit } from ’./fonctions’;

console.log(somme(2, 5));// affiche 7

console.log(produit(2, 5));// affiche 10

H & H: Research and Training 66 / 142

Page 132: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

import / export

TypeScript

Attention, ici on a importe somme avec deux alias differents

import s from ’./fonctions’;import produit from ’./fonctions’;

console.log(s(2, 5));// affiche 7

console.log(produit(2, 5));// affiche 7

H & H: Research and Training 67 / 142

Page 133: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Rappel

TypeScript

Qu’est ce qu’une classe en POO?

Ca correspond a un plan, un moule, une usine...

C’est une description abstraite d’un type d’objets

Elle represente un ensemble d’objets ayant les memes proprietesstatiques (attributs) et dynamiques (methodes)

Instance?

Une instance correspond a un objet cree a partir d’une classe (viale constructeur)

L’instanciation : creation d’un objet d’une classe

instance ≡ objet

H & H: Research and Training 68 / 142

Page 134: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Rappel

TypeScript

Qu’est ce qu’une classe en POO?

Ca correspond a un plan, un moule, une usine...

C’est une description abstraite d’un type d’objets

Elle represente un ensemble d’objets ayant les memes proprietesstatiques (attributs) et dynamiques (methodes)

Instance?

Une instance correspond a un objet cree a partir d’une classe (viale constructeur)

L’instanciation : creation d’un objet d’une classe

instance ≡ objet

H & H: Research and Training 68 / 142

Page 135: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Rappel

TypeScript

De quoi est compose une classe?

NomClasse

les attributs

les methodes

Attribut : [visibilite] + nom + type

Methode : [visibilite] + nom + arguments + valeur de retour ≡signature : exactement comme les fonctions en procedurale

H & H: Research and Training 69 / 142

Page 136: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScript

Considerons la classe Personne definie dans personne.ts

export class Personne {num: number;nom: string;prenom: string;

}

En TypeScript

Toute classe a un constructeur par defaut sans parametre.

Par defaut, la visibilite des attributs est public.

H & H: Research and Training 70 / 142

Page 137: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScript

Considerons la classe Personne definie dans personne.ts

export class Personne {num: number;nom: string;prenom: string;

}

En TypeScript

Toute classe a un constructeur par defaut sans parametre.

Par defaut, la visibilite des attributs est public.

H & H: Research and Training 70 / 142

Page 138: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScriptHypothese

Si on voulait creer un objet de la classe Personne avec les valeurs 1, wick et john

Etape 1 : Commencons par importer la classe Personne dans file.ts

import { Personne } from ’./personne’;

Etape 2 : declarons un objet (objet non cree)

let personne: Personne;

Etape 3 : creons l’objet (instanciation) de type Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

let personne: Personne = new Personne();

H & H: Research and Training 71 / 142

Page 139: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScriptHypothese

Si on voulait creer un objet de la classe Personne avec les valeurs 1, wick et john

Etape 1 : Commencons par importer la classe Personne dans file.ts

import { Personne } from ’./personne’;

Etape 2 : declarons un objet (objet non cree)

let personne: Personne;

Etape 3 : creons l’objet (instanciation) de type Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

let personne: Personne = new Personne();

H & H: Research and Training 71 / 142

Page 140: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScriptHypothese

Si on voulait creer un objet de la classe Personne avec les valeurs 1, wick et john

Etape 1 : Commencons par importer la classe Personne dans file.ts

import { Personne } from ’./personne’;

Etape 2 : declarons un objet (objet non cree)

let personne: Personne;

Etape 3 : creons l’objet (instanciation) de type Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

let personne: Personne = new Personne();

H & H: Research and Training 71 / 142

Page 141: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScriptHypothese

Si on voulait creer un objet de la classe Personne avec les valeurs 1, wick et john

Etape 1 : Commencons par importer la classe Personne dans file.ts

import { Personne } from ’./personne’;

Etape 2 : declarons un objet (objet non cree)

let personne: Personne;

Etape 3 : creons l’objet (instanciation) de type Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

let personne: Personne = new Personne();

H & H: Research and Training 71 / 142

Page 142: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScriptHypothese

Si on voulait creer un objet de la classe Personne avec les valeurs 1, wick et john

Etape 1 : Commencons par importer la classe Personne dans file.ts

import { Personne } from ’./personne’;

Etape 2 : declarons un objet (objet non cree)

let personne: Personne;

Etape 3 : creons l’objet (instanciation) de type Personne (objet cree)

personne = new Personne();

On peut faire declaration + instanciation

let personne: Personne = new Personne();

H & H: Research and Training 71 / 142

Page 143: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScript

Affectons les valeurs aux differents attributs

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Pour etre sur que les valeurs ont bien ete affectees aux attributs,on affiche

Console.log(personne)// affiche Personne { num: 1, nom: ’wick’, prenom: ’

john’ }

H & H: Research and Training 72 / 142

Page 144: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Syntaxe

TypeScript

Affectons les valeurs aux differents attributs

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Pour etre sur que les valeurs ont bien ete affectees aux attributs,on affiche

Console.log(personne)// affiche Personne { num: 1, nom: ’wick’, prenom: ’

john’ }

H & H: Research and Training 72 / 142

Page 145: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScriptHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 73 / 142

Page 146: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScriptHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 73 / 142

Page 147: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScriptHypothese

Supposant que l’on n’accepte pas de valeur negative pour l’attribut num de laclasse Personne

Demarche

1 Bloquer l’acces directe aux attributs (mettre la visibilite a private)

2 Definir des methodes publiques qui controlent l’affectation de valeursaux attributs (les setter)

Convention

Mettre la visibilite private ou protected pour tous les attributs

Mettre la visibilite public pour toutes les methodes

H & H: Research and Training 73 / 142

Page 148: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

Mettons la visibilite private pour tous les attributs de la classe Personne

export class Personne {private num: number;private nom: string;private prenom: string;

}

Dans le fichier file.ts, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Explication

Les attributs sont prives, donc aucun acces direct n’est autorise

Solution : les setters

Des methodes qui controlent l’affectation de valeurs aux attributs

H & H: Research and Training 74 / 142

Page 149: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

Mettons la visibilite private pour tous les attributs de la classe Personne

export class Personne {private num: number;private nom: string;private prenom: string;

}

Dans le fichier file.ts, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Explication

Les attributs sont prives, donc aucun acces direct n’est autorise

Solution : les setters

Des methodes qui controlent l’affectation de valeurs aux attributs

H & H: Research and Training 74 / 142

Page 150: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

Mettons la visibilite private pour tous les attributs de la classe Personne

export class Personne {private num: number;private nom: string;private prenom: string;

}

Dans le fichier file.ts, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Explication

Les attributs sont prives, donc aucun acces direct n’est autorise

Solution : les setters

Des methodes qui controlent l’affectation de valeurs aux attributs

H & H: Research and Training 74 / 142

Page 151: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

Mettons la visibilite private pour tous les attributs de la classe Personne

export class Personne {private num: number;private nom: string;private prenom: string;

}

Dans le fichier file.ts, les trois lignes suivantes sont soulignees en rouge

personne.num = 1;personne.nom = "wick";personne.prenom = "john";

Explication

Les attributs sont prives, donc aucun acces direct n’est autorise

Solution : les setters

Des methodes qui controlent l’affectation de valeurs aux attributs

H & H: Research and Training 74 / 142

Page 152: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScript

Conventions TypeScript

Le setter est une methode declaree avec le mot-cle set

Il porte le nom de l’attribut

On l’utilise comme un attribut

Pour eviter l’ambiguıte, on ajoute un underscore pour l’attribut

H & H: Research and Training 75 / 142

Page 153: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScriptNouveau contenu de la classe Personne apres ajout des setters

export class Personne {private _num: number;private _nom: string;private _prenom: string;

public set num(_num : number) {this._num = (_num >= 0 ? _num : 0);

}public set nom(_nom: string) {

this._nom = _nom;}public set prenom(_prenom: string) {

this._prenom = _prenom;}

}

H & H: Research and Training 76 / 142

Page 154: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScript

Pour tester, rien a changer dans file.ts

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = 1;personne.nom = "wick";personne.prenom = "john";

console.log(personne);

Pour transpiler, ajouter l’option -t es5, le resultat est :

Personne { num: 1, nom: ’wick’, prenom: ’john’ }

H & H: Research and Training 77 / 142

Page 155: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScript

Pour tester, rien a changer dans file.ts

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = 1;personne.nom = "wick";personne.prenom = "john";

console.log(personne);

Pour transpiler, ajouter l’option -t es5, le resultat est :

Personne { num: 1, nom: ’wick’, prenom: ’john’ }

H & H: Research and Training 77 / 142

Page 156: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScript

Testons avec une valeur negative pour l’attribut numero

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";

console.log(personne);

Le resultat est :Personne { num: 0, nom: ’wick’, prenom: ’john’ }

H & H: Research and Training 78 / 142

Page 157: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Setter

TypeScript

Testons avec une valeur negative pour l’attribut numero

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";

console.log(personne);

Le resultat est :Personne { num: 0, nom: ’wick’, prenom: ’john’ }

H & H: Research and Training 78 / 142

Page 158: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Getter

TypeScriptQuestion

Comment recuperer les attributs (prives) de la classe Personne?

Demarche

Definir des methodes qui retournent les valeurs des attributs (les getter)

Conventions TypeScript

Le getter est une methode declaree avec le mot-cle get

Il porte le nom de l’attribut

On l’utilise comme un attribut

H & H: Research and Training 79 / 142

Page 159: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Getter

TypeScriptQuestion

Comment recuperer les attributs (prives) de la classe Personne?

Demarche

Definir des methodes qui retournent les valeurs des attributs (les getter)

Conventions TypeScript

Le getter est une methode declaree avec le mot-cle get

Il porte le nom de l’attribut

On l’utilise comme un attribut

H & H: Research and Training 79 / 142

Page 160: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Getter

TypeScriptQuestion

Comment recuperer les attributs (prives) de la classe Personne?

Demarche

Definir des methodes qui retournent les valeurs des attributs (les getter)

Conventions TypeScript

Le getter est une methode declaree avec le mot-cle get

Il porte le nom de l’attribut

On l’utilise comme un attribut

H & H: Research and Training 79 / 142

Page 161: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Getter

TypeScript

Ajoutons les getters dans la classe Personne

public get num() : number {return this._num;

}public get nom(): string {

return this._nom;}public get prenom(): string {

return this._prenom;}

H & H: Research and Training 80 / 142

Page 162: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Getter

TypeScript

Pour tester

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = 1;personne.nom = "wick";personne.prenom = "john";

console.log(personne.num);// affiche 1

console.log(personne.nom);// affiche wick

console.log(personne.prenom);// affiche john

H & H: Research and Training 81 / 142

Page 163: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Remarques

Par defaut, toute classe en TypeScript a un constructeur pardefaut sans parametre

Pour simplifier la creation d’objets, on peut definir un nouveauconstructeur qui prend en parametre plusieurs attributs de laclasse

Les constructeurs avec TypeScript

On le declare avec le mot-cle constructor

Il peut contenir la visibilite des attributs si on veut simplifier ladeclaration

H & H: Research and Training 82 / 142

Page 164: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Remarques

Par defaut, toute classe en TypeScript a un constructeur pardefaut sans parametre

Pour simplifier la creation d’objets, on peut definir un nouveauconstructeur qui prend en parametre plusieurs attributs de laclasse

Les constructeurs avec TypeScript

On le declare avec le mot-cle constructor

Il peut contenir la visibilite des attributs si on veut simplifier ladeclaration

H & H: Research and Training 82 / 142

Page 165: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScriptLe constructeur de la classe Personne prenant trois parametres

public constructor(_num: number, _nom: string, _prenom:string) {this._num = _num;this._nom = _nom;this._prenom = _prenom;

}

Pour preserver la coherence, il faut que le constructeur controle lavaleur de l’attribut num

public constructor(_num: number, _nom: string, _prenom:string) {this._num = (_num >= 0 ? _num : 0);this._nom = _nom;this._prenom = _prenom;

}

H & H: Research and Training 83 / 142

Page 166: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScriptLe constructeur de la classe Personne prenant trois parametres

public constructor(_num: number, _nom: string, _prenom:string) {this._num = _num;this._nom = _nom;this._prenom = _prenom;

}

Pour preserver la coherence, il faut que le constructeur controle lavaleur de l’attribut num

public constructor(_num: number, _nom: string, _prenom:string) {this._num = (_num >= 0 ? _num : 0);this._nom = _nom;this._prenom = _prenom;

}

H & H: Research and Training 83 / 142

Page 167: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

On peut aussi appele le setter dans le constructeur

public constructor(_num: number, _nom: string,_prenom: string) {this.num = _num;this._nom = _nom;this._prenom = _prenom;

}

H & H: Research and Training 84 / 142

Page 168: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Dans file.ts, la ligne suivante est soulignee en rougelet personne: Personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

Comment faire?

TypeScript n’autorise pas la presence de plusieurs constructeurs(la surcharge)

On peut utiliser soit les valeurs par defaut, soit les parametresoptionnels

H & H: Research and Training 85 / 142

Page 169: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Dans file.ts, la ligne suivante est soulignee en rougelet personne: Personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

Comment faire?

TypeScript n’autorise pas la presence de plusieurs constructeurs(la surcharge)

On peut utiliser soit les valeurs par defaut, soit les parametresoptionnels

H & H: Research and Training 85 / 142

Page 170: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Dans file.ts, la ligne suivante est soulignee en rougelet personne: Personne = new Personne();

Explication

Le constructeur par defaut a ete ecrase (il n’existe plus)

Comment faire ?

TypeScript n’autorise pas la presence de plusieurs constructeurs(la surcharge)

On peut utiliser soit les valeurs par defaut, soit les parametresoptionnels

H & H: Research and Training 85 / 142

Page 171: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Le nouveau constructeur avec les parametres optionnels

public constructor(_num?: number, _nom?: string,_prenom?: string) {if(_num)this.num = _num;

if (_nom)this._nom = _nom;

if(_prenom)this._prenom = _prenom;

}

H & H: Research and Training 86 / 142

Page 172: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Pour tester

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";console.log(personne);

let personne2: Personne = new Personne(2, ’bob’, ’mike’);console.log(personne2);

En executant, le resultat est :

Personne { num: 0, nom: ’wick’, prenom: ’john’ }Personne { num: 2, nom: ’bob’, prenom: ’mike’ }

H & H: Research and Training 87 / 142

Page 173: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

Pour tester

import { Personne } from ’./personne’;

let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";console.log(personne);

let personne2: Personne = new Personne(2, ’bob’, ’mike’);console.log(personne2);

En executant, le resultat est :

Personne { num: 0, nom: ’wick’, prenom: ’john’ }Personne { num: 2, nom: ’bob’, prenom: ’mike’ }

H & H: Research and Training 87 / 142

Page 174: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

TypeScript nous offre la possibilite de fusionner la declaration des attributs et leconstructeur

public constructor(private _num?: number,private _nom?: string,private _prenom?: string) {

// le constructeur fait systematiquement appel aux setters}

En executant, le resultat est le meme

Personne { num: 0, nom: ’wick’, prenom: ’john’ }Personne { num: 2, nom: ’bob’, prenom: ’mike’ }

H & H: Research and Training 88 / 142

Page 175: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Constructeur

TypeScript

TypeScript nous offre la possibilite de fusionner la declaration des attributs et leconstructeur

public constructor(private _num?: number,private _nom?: string,private _prenom?: string) {

// le constructeur fait systematiquement appel aux setters}

En executant, le resultat est le meme

Personne { num: 0, nom: ’wick’, prenom: ’john’ }Personne { num: 2, nom: ’bob’, prenom: ’mike’ }

H & H: Research and Training 88 / 142

Page 176: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs mais pas les memesvaleurs

Hypothese

Et si nous voulions qu’un attribut ait une valeur partagee par toutes les instances (parexemple, le nombre d’objets instancies de la classe Personne)

Solution : attribut statique ou attribut de classe

Un attribut dont la valeur est partagee par toutes les instances de la classe.

H & H: Research and Training 89 / 142

Page 177: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs mais pas les memesvaleurs

Hypothese

Et si nous voulions qu’un attribut ait une valeur partagee par toutes les instances (parexemple, le nombre d’objets instancies de la classe Personne)

Solution : attribut statique ou attribut de classe

Un attribut dont la valeur est partagee par toutes les instances de la classe.

H & H: Research and Training 89 / 142

Page 178: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Recapitulatif

Les instances d’une meme classe ont toutes les memes attributs mais pas les memesvaleurs

Hypothese

Et si nous voulions qu’un attribut ait une valeur partagee par toutes les instances (parexemple, le nombre d’objets instancies de la classe Personne)

Solution : attribut statique ou attribut de classe

Un attribut dont la valeur est partagee par toutes les instances de la classe.

H & H: Research and Training 89 / 142

Page 179: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Exemple

Si on voulait creer un attribut contenant le nombre d’objets crees apartir de la classe Personne

Notre attribut doit etre declare static, sinon chaque objetpourrait avoir sa propre valeur pour cet attribut

H & H: Research and Training 90 / 142

Page 180: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Ajoutons un attribut statique nbrPersonnes a la liste d’attributs de laclasse Personne

private static _nbrPersonnes: number = 0;

Incrementons notre compteur de personnes dans les constructeurs

public constructor(private _num?: number,private _nom?: string,private _prenom?: string) {

Personne._nbrPersonnes++;}

H & H: Research and Training 91 / 142

Page 181: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Ajoutons un attribut statique nbrPersonnes a la liste d’attributs de laclasse Personne

private static _nbrPersonnes: number = 0;

Incrementons notre compteur de personnes dans les constructeurs

public constructor(private _num?: number,private _nom?: string,private _prenom?: string) {

Personne._nbrPersonnes++;}

H & H: Research and Training 91 / 142

Page 182: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScriptCreons un getter pour l’attribut static nbrPersonnes

public static get nbrPersonnes() {return Personne._nbrPersonnes;

}

Testons cela dans file.ts

import { Personne } from ’./personne’;

console.log(Personne.nbrPersonnes);// affiche 0let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";console.log(Personne.nbrPersonnes);// affiche 1let personne2: Personne = new Personne(2, ’bob’, ’mike’);console.log(Personne.nbrPersonnes);// affiche 2

H & H: Research and Training 92 / 142

Page 183: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScriptCreons un getter pour l’attribut static nbrPersonnes

public static get nbrPersonnes() {return Personne._nbrPersonnes;

}

Testons cela dans file.ts

import { Personne } from ’./personne’;

console.log(Personne.nbrPersonnes);// affiche 0let personne: Personne = new Personne();personne.num = -1;personne.nom = "wick";personne.prenom = "john";console.log(Personne.nbrPersonnes);// affiche 1let personne2: Personne = new Personne(2, ’bob’, ’mike’);console.log(Personne.nbrPersonnes);// affiche 2

H & H: Research and Training 92 / 142

Page 184: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe Attributs et methodes statiques

TypeScript

Exercice

Definir une classe Adresse avec trois attributs prives rue,codePostal et ville de type chaıne de caractere

Definir un constructeur avec trois parametres, les getters etsetters

Dans la classe Personne, ajouter un attribut adresse (de typeAdresse) et definir un nouveau constructeur a quatre parametreset le getter et le setter de ce nouvel attribut

Dans file.ts, creer deux objets : un objet adresse (de typeAdresse) et personne (de type Personne) prenant commeadresse l’objet adresse

Afficher tous les attributs de l’objet personne

H & H: Research and Training 93 / 142

Page 185: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

L’heritage, quand ?

Lorsque deux ou plusieurs classes partagent plusieurs attributs(et methodes)

Lorsqu’une Classe1 est (une sorte de ) Classe2

Forme generale

class ClasseFille extends ClasseMere{

// code};

H & H: Research and Training 94 / 142

Page 186: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

L’heritage, quand ?

Lorsque deux ou plusieurs classes partagent plusieurs attributs(et methodes)

Lorsqu’une Classe1 est (une sorte de ) Classe2

Forme generale

class ClasseFille extends ClasseMere{

// code};

H & H: Research and Training 94 / 142

Page 187: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 188: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 189: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 190: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 191: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 192: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exemple

Un enseignant a un numero, un nom, un prenom et un salaire

Un etudiant a aussi un numero, un nom, un prenom et un niveau

Semantiquement, enseignant et etudiant sont une sorte de personne

En plus, les deux partagent plusieurs attributs tels que numero, nom etprenom

Donc, on peut peut utiliser la classe Personne puisqu’elle contient tousles attributs numero, nom et prenom

Les classes Etudiant et Enseignant heriteront donc (extends) dela classe Personne

H & H: Research and Training 95 / 142

Page 193: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Particularite du langage TypeScript

Une classe ne peut heriter que d’une seule classe

L’heritage multiple est donc non-autorise.

H & H: Research and Training 96 / 142

Page 194: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptPreparons la classe Enseignant

import { Personne } from "./personne";

export class Enseignant extends Personne {

}

Preparons la classe Etudiant

import { Personne } from "./personne";

export class Etudiant extends Personne {

}

extends est le mot-cle a utiliser pour definir une relation d’heritageentre deux classes

H & H: Research and Training 97 / 142

Page 195: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptPreparons la classe Enseignant

import { Personne } from "./personne";

export class Enseignant extends Personne {

}

Preparons la classe Etudiant

import { Personne } from "./personne";

export class Etudiant extends Personne {

}

extends est le mot-cle a utiliser pour definir une relation d’heritageentre deux classes

H & H: Research and Training 97 / 142

Page 196: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Ensuite

Creer un attribut niveau dans la classe Etudiant ainsi que sesgetter et setter

Creer un attribut salaire dans la classe Enseignant ainsi queses getter et setter

H & H: Research and Training 98 / 142

Page 197: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Pour creer un objet de type Enseignant

import { Enseignant } from ’./enseignant’;

let enseignant: Enseignant = new Enseignant();enseignant.num = 3;enseignant.nom = "green";enseignant.prenom = "jonas";enseignant.salaire = 1700;console.log(enseignant);

En executant, le resultat est :

Enseignant { _num: 3, _nom: ’green’, _prenom: ’jonas’, _salaire: 1700 }

H & H: Research and Training 99 / 142

Page 198: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Pour creer un objet de type Enseignant

import { Enseignant } from ’./enseignant’;

let enseignant: Enseignant = new Enseignant();enseignant.num = 3;enseignant.nom = "green";enseignant.prenom = "jonas";enseignant.salaire = 1700;console.log(enseignant);

En executant, le resultat est :

Enseignant { _num: 3, _nom: ’green’, _prenom: ’jonas’, _salaire: 1700 }

H & H: Research and Training 99 / 142

Page 199: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptTypeScript autorise la redefinition : on peut definir un constructeur, meme s’ilexiste dans la classe mere, qui prend plusieurs parametres et qui utilise leconstructeur de la classe mere

constructor(_num?: number,_nom?: string,_prenom?: string,private _salaire?: number) {

super(_num, _nom, _prenom);}

super() fait appel au constructeur de la classe mere

Maintenant, on peut creer un enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Refaire la meme chose pour Etudiant

H & H: Research and Training 100 / 142

Page 200: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptTypeScript autorise la redefinition : on peut definir un constructeur, meme s’ilexiste dans la classe mere, qui prend plusieurs parametres et qui utilise leconstructeur de la classe mere

constructor(_num?: number,_nom?: string,_prenom?: string,private _salaire?: number) {

super(_num, _nom, _prenom);}

super() fait appel au constructeur de la classe mere

Maintenant, on peut creer un enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Refaire la meme chose pour Etudiant

H & H: Research and Training 100 / 142

Page 201: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptTypeScript autorise la redefinition : on peut definir un constructeur, meme s’ilexiste dans la classe mere, qui prend plusieurs parametres et qui utilise leconstructeur de la classe mere

constructor(_num?: number,_nom?: string,_prenom?: string,private _salaire?: number) {

super(_num, _nom, _prenom);}

super() fait appel au constructeur de la classe mere

Maintenant, on peut creer un enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Refaire la meme chose pour Etudiant

H & H: Research and Training 100 / 142

Page 202: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScriptTypeScript autorise la redefinition : on peut definir un constructeur, meme s’ilexiste dans la classe mere, qui prend plusieurs parametres et qui utilise leconstructeur de la classe mere

constructor(_num?: number,_nom?: string,_prenom?: string,private _salaire?: number) {

super(_num, _nom, _prenom);}

super() fait appel au constructeur de la classe mere

Maintenant, on peut creer un enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Refaire la meme chose pour EtudiantH & H: Research and Training 100 / 142

Page 203: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

A partir de la classe Enseignant

On ne peut avoir acces direct a un attribut de la classe mere

C’est-a-dire, on ne peut faire this. num car les attributs ont unevisibilite private

Pour modifier la valeur d’un attribut prive de la classe mere, il faut

soit utiliser les getters/setters

soit mettre la visibilite des attributs de la classe mere a protected

H & H: Research and Training 101 / 142

Page 204: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

On peut creer un objet de la classe Enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

let enseignant: Personne = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

let enseignant: Enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 102 / 142

Page 205: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

On peut creer un objet de la classe Enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

let enseignant: Personne = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

let enseignant: Enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 102 / 142

Page 206: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

On peut creer un objet de la classe Enseignant ainsi

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

Ou ainsi

let enseignant: Personne = new Enseignant(3, "green", "jonas", 1700);

Ceci est faux

let enseignant: Enseignant = new Personne(3, "green", "jonas");

H & H: Research and Training 102 / 142

Page 207: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Remarque

Pour connaıtre la classe d’un objet, on peut utiliser le mot-cle instanceof

Exemple

let enseignant: Personne = new Enseignant(3, "green", "jonas",1700);

console.log(enseignant instanceof Enseignant);// affiche true

console.log(enseignant instanceof Personne);// affiche true

console.log(personne instanceof Enseignant);// affiche false

H & H: Research and Training 103 / 142

Page 208: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Remarque

Pour connaıtre la classe d’un objet, on peut utiliser le mot-cle instanceof

Exemple

let enseignant: Personne = new Enseignant(3, "green", "jonas",1700);

console.log(enseignant instanceof Enseignant);// affiche true

console.log(enseignant instanceof Personne);// affiche true

console.log(personne instanceof Enseignant);// affiche false

H & H: Research and Training 103 / 142

Page 209: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exercice

1 Creer un objet de type Etudiant, un deuxieme de type Enseignant et undernier de type Personne stocker les tous dans un seul tableau.

2 Parcourir le tableau et afficher pour chacun soit le numero s’il est personne, soitle salaire s’il est enseignant ou soit le niveau s’il est etudiant.

Pour parcourir un tableau, on peut faire

let personnes: Array<Personne> = [personne, enseignant,etudiant];

for(let p of personnes) {

}

H & H: Research and Training 104 / 142

Page 210: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Exercice

1 Creer un objet de type Etudiant, un deuxieme de type Enseignant et undernier de type Personne stocker les tous dans un seul tableau.

2 Parcourir le tableau et afficher pour chacun soit le numero s’il est personne, soitle salaire s’il est enseignant ou soit le niveau s’il est etudiant.

Pour parcourir un tableau, on peut faire

let personnes: Array<Personne> = [personne, enseignant,etudiant];

for(let p of personnes) {

}

H & H: Research and Training 104 / 142

Page 211: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Heritage

TypeScript

Solution

let personnes: Array<Personne> = [personne,enseignant, etudiant];

for(let p of personnes) {

if(p instanceof Enseignant)console.log(p.salaire);

else if (p instanceof Etudiant)console.log(p.niveau)

elseconsole.log(p.num);

}

H & H: Research and Training 105 / 142

Page 212: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptClasse abstraite

C’est une classe qu’on ne peut instancier

On la declare avec le mot-cle abstract

Si on declare la classe Personne abstraite

export abstract class Personne {...

}

Tout ce code sera souligne en rouge

let personne: Personne = new Personne();...let personne2: Personne = new Personne(2, ’bob’, ’mike’);

H & H: Research and Training 106 / 142

Page 213: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptClasse abstraite

C’est une classe qu’on ne peut instancier

On la declare avec le mot-cle abstract

Si on declare la classe Personne abstraite

export abstract class Personne {...

}

Tout ce code sera souligne en rouge

let personne: Personne = new Personne();...let personne2: Personne = new Personne(2, ’bob’, ’mike’);

H & H: Research and Training 106 / 142

Page 214: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptClasse abstraite

C’est une classe qu’on ne peut instancier

On la declare avec le mot-cle abstract

Si on declare la classe Personne abstraite

export abstract class Personne {...

}

Tout ce code sera souligne en rouge

let personne: Personne = new Personne();...let personne2: Personne = new Personne(2, ’bob’, ’mike’);

H & H: Research and Training 106 / 142

Page 215: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classe abstraite

Une methode abstraite doit etre implementee par les classes filles de la classe abstraite

Declarons une methode abstraite afficherDetails() dans Personne

abstract afficherDetails(): void ;

Remarque

La methode afficherDetails() dans Personne est soulignee en rouge car la classedoit etre declaree abstraite

En declarant la classe Personne abstraite, les deux classes Etudiant et Enseignantsont soulignees en rouge car elles doivent implementer les methodes abstraites dePersonne

H & H: Research and Training 107 / 142

Page 216: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classe abstraite

Une methode abstraite doit etre implementee par les classes filles de la classe abstraite

Declarons une methode abstraite afficherDetails() dans Personne

abstract afficherDetails(): void ;

Remarque

La methode afficherDetails() dans Personne est soulignee en rouge car la classedoit etre declaree abstraite

En declarant la classe Personne abstraite, les deux classes Etudiant et Enseignantsont soulignees en rouge car elles doivent implementer les methodes abstraites dePersonne

H & H: Research and Training 107 / 142

Page 217: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScriptMethode abstraite

C’est une methode non implementee (sans code)

Une methode abstraite doit etre declaree dans une classe abstraite

Une methode abstraite doit etre implementee par les classes filles de la classe abstraite

Declarons une methode abstraite afficherDetails() dans Personne

abstract afficherDetails(): void ;

Remarque

La methode afficherDetails() dans Personne est soulignee en rouge car la classedoit etre declaree abstraite

En declarant la classe Personne abstraite, les deux classes Etudiant et Enseignantsont soulignees en rouge car elles doivent implementer les methodes abstraites dePersonne

H & H: Research and Training 107 / 142

Page 218: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, cliquer sur Quick Fix puis Add inherited abstract class

Le code genere

afficherDetails(): void {throw new Error("Method not implemented.");

}

Remplacons le code genere dans Etudiant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.niveau);

}

Et dans Enseignant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.salaire);

}

H & H: Research and Training 108 / 142

Page 219: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, cliquer sur Quick Fix puis Add inherited abstract class

Le code genere

afficherDetails(): void {throw new Error("Method not implemented.");

}

Remplacons le code genere dans Etudiant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.niveau);

}

Et dans Enseignant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.salaire);

}

H & H: Research and Training 108 / 142

Page 220: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, cliquer sur Quick Fix puis Add inherited abstract class

Le code genere

afficherDetails(): void {throw new Error("Method not implemented.");

}

Remplacons le code genere dans Etudiant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.niveau);

}

Et dans Enseignant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.salaire);

}

H & H: Research and Training 108 / 142

Page 221: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

Pour implementer la methode abstraite

Placer le curseur sur le nom de la classe

Dans le menu afficher, cliquer sur Quick Fix puis Add inherited abstract class

Le code genere

afficherDetails(): void {throw new Error("Method not implemented.");

}

Remplacons le code genere dans Etudiant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.niveau);

}

Et dans Enseignant par

afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.salaire);

}

H & H: Research and Training 108 / 142

Page 222: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScript

Pour tester

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

enseignant.afficherDetails();

En executant, le resultat est :

green jonas 1700

H & H: Research and Training 109 / 142

Page 223: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Classe et methode abstraites

TypeScript

Pour tester

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

enseignant.afficherDetails();

En executant, le resultat est :

green jonas 1700

H & H: Research and Training 109 / 142

Page 224: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

En TypeScript

Une classe ne peut heriter que d’une seule classe

Mais elle peut heriter de plusieurs interfaces

Une interface

declaree avec le mot-cle interface

comme une classe completement abstraite (impossible del’instancier) dont : toutes les methodes sont abstraites

un protocole, un contrat : toute classe qui herite d’une interfacedoit implementer toutes ses methodes

H & H: Research and Training 110 / 142

Page 225: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

En TypeScript

Une classe ne peut heriter que d’une seule classe

Mais elle peut heriter de plusieurs interfaces

Une interface

declaree avec le mot-cle interface

comme une classe completement abstraite (impossible del’instancier) dont : toutes les methodes sont abstraites

un protocole, un contrat : toute classe qui herite d’une interfacedoit implementer toutes ses methodes

H & H: Research and Training 110 / 142

Page 226: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Definissons l’interface IMiseEnForme dans i-mise-en-forme.ts

export interface IMiseEnForme {afficherNomMajuscule(): void;afficherPrenomMajuscule() : void;

}

Pour heriter d’une interface, on utilise le mot-cle implements

export abstract class Personne implements IMiseEnForme {...

}

H & H: Research and Training 111 / 142

Page 227: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Definissons l’interface IMiseEnForme dans i-mise-en-forme.ts

export interface IMiseEnForme {afficherNomMajuscule(): void;afficherPrenomMajuscule() : void;

}

Pour heriter d’une interface, on utilise le mot-cle implements

export abstract class Personne implements IMiseEnForme {...

}

H & H: Research and Training 111 / 142

Page 228: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

La classe Personne est soulignee en rouge

Placer le curseur sur la classe Personne

Dans le menu afficher, cliquer sur Quick Fix puis Addinherited abstract class

Le code genere

afficherNomMajuscule(): void {throw new Error("Method not implemented.");

}afficherPrenomMajuscule(): void {

throw new Error("Method not implemented.");}

H & H: Research and Training 112 / 142

Page 229: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

La classe Personne est soulignee en rouge

Placer le curseur sur la classe Personne

Dans le menu afficher, cliquer sur Quick Fix puis Addinherited abstract class

Le code genere

afficherNomMajuscule(): void {throw new Error("Method not implemented.");

}afficherPrenomMajuscule(): void {

throw new Error("Method not implemented.");}

H & H: Research and Training 112 / 142

Page 230: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Modifions le code de deux methodes generees

afficherNomMajuscule(): void {console.log(this.nom.toUpperCase());

}

afficherPrenomMajuscule(): void {console.log(this.prenom.toUpperCase());

}

H & H: Research and Training 113 / 142

Page 231: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Pour tester

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

enseignant.afficherNomMajuscule();enseignant.afficherPrenomMajuscule();

En executant, le resultat est :

GREENJONAS

H & H: Research and Training 114 / 142

Page 232: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Pour tester

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);

enseignant.afficherNomMajuscule();enseignant.afficherPrenomMajuscule();

En executant, le resultat est :

GREENJONAS

H & H: Research and Training 114 / 142

Page 233: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Remarque

Une interface peut heriter de plusieurs autres interfaces (mais pasd’une classe)

Pour cela, il faut utiliser le mot-cle extends et pas implementscar une interface n’implemente jamais de methodes.

H & H: Research and Training 115 / 142

Page 234: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Une deuxieme utilisation

En TypeScript, une interface peut etre utilisee comme une classeModel de plusieurs autres interfaces (mais pas d’une classe)

Elle contient des attributs (qui sont par definition publiques) et desmethodes (abstraites)

Exemple

export interface Person {num: number;nom: string;prenom: string;

}

H & H: Research and Training 116 / 142

Page 235: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Une deuxieme utilisation

En TypeScript, une interface peut etre utilisee comme une classeModel de plusieurs autres interfaces (mais pas d’une classe)

Elle contient des attributs (qui sont par definition publiques) et desmethodes (abstraites)

Exemple

export interface Person {num: number;nom: string;prenom: string;

}

H & H: Research and Training 116 / 142

Page 236: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScriptImpossible d’instancier cette interface avec l’operateur new, mais onpeut utiliser les objets JavaScript

let person: Person = {num: 1000,nom: ’turing’,prenom: ’alan’

};console.log(person)// affiche { num: 1000, nom: ’turing’, prenom: ’alan’ }

On peut rendre les attributs optionnels

export interface Person {num?: number;nom?: string;prenom?: string;

}

H & H: Research and Training 117 / 142

Page 237: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScriptImpossible d’instancier cette interface avec l’operateur new, mais onpeut utiliser les objets JavaScript

let person: Person = {num: 1000,nom: ’turing’,prenom: ’alan’

};console.log(person)// affiche { num: 1000, nom: ’turing’, prenom: ’alan’ }

On peut rendre les attributs optionnels

export interface Person {num?: number;nom?: string;prenom?: string;

}

H & H: Research and Training 117 / 142

Page 238: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Ainsi on peut faire

let person: Person = {nom: ’turing’,

};console.log(person)// affiche { nom: ’turing’ }

Pour la suite, gardons l’attribut nom obligatoire

export interface Person {num?: number;nom: string;prenom?: string;

}

H & H: Research and Training 118 / 142

Page 239: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Ainsi on peut faire

let person: Person = {nom: ’turing’,

};console.log(person)// affiche { nom: ’turing’ }

Pour la suite, gardons l’attribut nom obligatoire

export interface Person {num?: number;nom: string;prenom?: string;

}

H & H: Research and Training 118 / 142

Page 240: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Duck typing

Un concept un peu proche du polymorphisme

Il se base sur une serie d’attributs et de methodes attendus.

L’objet est considere valide quel que soit sa classe s’il respecte lesattributs et les methodes attendus.

Exemple : considerons la fonction afficherNom() definie dansfile.ts

function afficherNom(p: Person){console.log(p.nom)

}

H & H: Research and Training 119 / 142

Page 241: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScript

Duck typing

Un concept un peu proche du polymorphisme

Il se base sur une serie d’attributs et de methodes attendus.

L’objet est considere valide quel que soit sa classe s’il respecte lesattributs et les methodes attendus.

Exemple : considerons la fonction afficherNom() definie dansfile.ts

function afficherNom(p: Person){console.log(p.nom)

}

H & H: Research and Training 119 / 142

Page 242: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScriptSi l’objet passe en parametre contient un attribut nom, alors ce dernier sera affiche

afficherNom(person);// affiche turing

afficherNom(personne);// affiche wick

Ceci est aussi correcte car alien a un attribut nom

let alien = { couleur: ’blanc’, nom: ’white’ };afficherNom(alien);// affiche white

Ceci genere une erreur car voiture n’a pas d’attribut nom

let voiture = { marque: ’ford’, modele: ’fiesta’, num: 100000};afficherNom(voiture);

H & H: Research and Training 120 / 142

Page 243: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScriptSi l’objet passe en parametre contient un attribut nom, alors ce dernier sera affiche

afficherNom(person);// affiche turing

afficherNom(personne);// affiche wick

Ceci est aussi correcte car alien a un attribut nom

let alien = { couleur: ’blanc’, nom: ’white’ };afficherNom(alien);// affiche white

Ceci genere une erreur car voiture n’a pas d’attribut nom

let voiture = { marque: ’ford’, modele: ’fiesta’, num: 100000};afficherNom(voiture);

H & H: Research and Training 120 / 142

Page 244: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Interface

TypeScriptSi l’objet passe en parametre contient un attribut nom, alors ce dernier sera affiche

afficherNom(person);// affiche turing

afficherNom(personne);// affiche wick

Ceci est aussi correcte car alien a un attribut nom

let alien = { couleur: ’blanc’, nom: ’white’ };afficherNom(alien);// affiche white

Ceci genere une erreur car voiture n’a pas d’attribut nom

let voiture = { marque: ’ford’, modele: ’fiesta’, num: 100000};afficherNom(voiture);

H & H: Research and Training 120 / 142

Page 245: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Decorateur

TypeScript

Decorateur

L’equivalent d’annotations en Java et php

Meta-programmation (modification des informations/comportement surun objet/classe)

Utilise avec le prefixe @

Ajoutons le decorateur @f() a afficherDetails() dans Enseignant

@f()afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.

salaire);}

H & H: Research and Training 121 / 142

Page 246: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Decorateur

TypeScript

Decorateur

L’equivalent d’annotations en Java et php

Meta-programmation (modification des informations/comportement surun objet/classe)

Utilise avec le prefixe @

Ajoutons le decorateur @f() a afficherDetails() dans Enseignant

@f()afficherDetails(): void {console.log(this.nom + " " + this.prenom + " " + this.

salaire);}

H & H: Research and Training 121 / 142

Page 247: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Decorateur

TypeScriptLe decorateur @f() n’existe pas en TypeScript, il faut donc le definir (en lui associant unefonction)

export function f() {return function(a,b,c){

console.log(’before afficherDetails()’);}

}

Testons maintenant le code suivant et verifions que la fonction associee au decorateur abien ete executee (ajouter l’option --experimentalDecorators a la commande detranspilation)

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);enseignant.afficherDetails();

Le resultat est :

before afficherDetails()green jonas 1700

H & H: Research and Training 122 / 142

Page 248: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Decorateur

TypeScriptLe decorateur @f() n’existe pas en TypeScript, il faut donc le definir (en lui associant unefonction)

export function f() {return function(a,b,c){

console.log(’before afficherDetails()’);}

}

Testons maintenant le code suivant et verifions que la fonction associee au decorateur abien ete executee (ajouter l’option --experimentalDecorators a la commande detranspilation)

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);enseignant.afficherDetails();

Le resultat est :

before afficherDetails()green jonas 1700

H & H: Research and Training 122 / 142

Page 249: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Decorateur

TypeScriptLe decorateur @f() n’existe pas en TypeScript, il faut donc le definir (en lui associant unefonction)

export function f() {return function(a,b,c){

console.log(’before afficherDetails()’);}

}

Testons maintenant le code suivant et verifions que la fonction associee au decorateur abien ete executee (ajouter l’option --experimentalDecorators a la commande detranspilation)

let enseignant: Enseignant = new Enseignant(3, "green", "jonas", 1700);enseignant.afficherDetails();

Le resultat est :

before afficherDetails()green jonas 1700

H & H: Research and Training 122 / 142

Page 250: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Genericite

TypeScript

Genericite

Un concept defini dans tous les LOO avec < ... >

Elle permet de definir des fonctions, classes, interfaces quis’adaptent avec plusieurs types

H & H: Research and Training 123 / 142

Page 251: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Genericite

TypeScript

Exemple

si on a besoin d’une classe dont les methodes effectuent lesmemes operations quel que soit le type d’attributs

somme pour entiers ou reels,

concatenation pour chaınes de caracteres,

ou logique pour booleens...

...

Impossible sans definir plusieurs classes (une pour chaquetype)

H & H: Research and Training 124 / 142

Page 252: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Genericite

TypeScriptSolution avec la genericite

export class Operation<T>{

constructor(private var1: T, private var2: T) { }

public plus() {if (typeof this.var1 == ’string’) {

return this.var1 + this.var2;}else if (typeof this.var1 == ’number’ && typeof this.var2 == ’

number’) {return this.var1 + this.var2;

}else if (typeof this.var1 == ’boolean’ && typeof this.var2 == ’

boolean’) {return this.var1 || this.var2;

}else {

throw "error"}

}}

H & H: Research and Training 125 / 142

Page 253: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Genericite

TypeScript

Nous pouvons donc utiliser la meme methode qui fait la meme chose pour des typesdifferents

let operation1: Operation<number> = new Operation(5, 3);console.log(operation1.plus());// affiche 8

let operation2: Operation<string> = new Operation("bon", "jour");console.log(operation2.plus());// affiche bonjour

let operation3: Operation<number> = new Operation(5.2, 3.8);console.log(operation3.plus());// affiche 9

let operation4: Operation<boolean> = new Operation(true, false);console.log(operation4.plus());// affiche true

H & H: Research and Training 126 / 142

Page 254: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScript

Map (dictionnaire)

Type fonctionnant avec un couple (cle,valeur)

La cle doit etre unique

Chaque element est appele entree (entry)

Les elements sont stockes et recuperes dans l’ordre d’insertion

Disponible depuis ES5 puis modifie dans ES6

Pour tester, utiliser l’option -t ES6

H & H: Research and Training 127 / 142

Page 255: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScript

Map (dictionnaire)

Type fonctionnant avec un couple (cle,valeur)

La cle doit etre unique

Chaque element est appele entree (entry)

Les elements sont stockes et recuperes dans l’ordre d’insertion

Disponible depuis ES5 puis modifie dans ES6

Pour tester, utiliser l’option -t ES6

H & H: Research and Training 127 / 142

Page 256: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour creer un Map

let map: Map<string, number> = new Map([[’php’, 17],[’java’, 10],[’c’, 12]

]);console.log(map);// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12 }

Ajouter un element a un Map

map.set(’html’, 18);

Pour ajouter plusieurs elements a la fois

map.set(’html’, 18).set(’css’, 12);

H & H: Research and Training 128 / 142

Page 257: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour creer un Map

let map: Map<string, number> = new Map([[’php’, 17],[’java’, 10],[’c’, 12]

]);console.log(map);// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12 }

Ajouter un element a un Map

map.set(’html’, 18);

Pour ajouter plusieurs elements a la fois

map.set(’html’, 18).set(’css’, 12);

H & H: Research and Training 128 / 142

Page 258: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour creer un Map

let map: Map<string, number> = new Map([[’php’, 17],[’java’, 10],[’c’, 12]

]);console.log(map);// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12 }

Ajouter un element a un Map

map.set(’html’, 18);

Pour ajouter plusieurs elements a la fois

map.set(’html’, 18).set(’css’, 12);

H & H: Research and Training 128 / 142

Page 259: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptSi la cle existe deja, la valeur sera remplacee

console.log(map.set(’html’, 20));// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12, ’html’ => 20 }

Pour recuperer la valeur associee a une cle

console.log(map.get(’php’));// affiche 17

Pour verifier l’existence d’une cle

console.log(map.has(’php’));// affiche true

Pour supprimer un element selon la cle

map.delete(’php’);

H & H: Research and Training 129 / 142

Page 260: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptSi la cle existe deja, la valeur sera remplacee

console.log(map.set(’html’, 20));// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12, ’html’ => 20 }

Pour recuperer la valeur associee a une cle

console.log(map.get(’php’));// affiche 17

Pour verifier l’existence d’une cle

console.log(map.has(’php’));// affiche true

Pour supprimer un element selon la cle

map.delete(’php’);

H & H: Research and Training 129 / 142

Page 261: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptSi la cle existe deja, la valeur sera remplacee

console.log(map.set(’html’, 20));// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12, ’html’ => 20 }

Pour recuperer la valeur associee a une cle

console.log(map.get(’php’));// affiche 17

Pour verifier l’existence d’une cle

console.log(map.has(’php’));// affiche true

Pour supprimer un element selon la cle

map.delete(’php’);

H & H: Research and Training 129 / 142

Page 262: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptSi la cle existe deja, la valeur sera remplacee

console.log(map.set(’html’, 20));// affiche Map { ’php’ => 17, ’java’ => 10, ’c’ => 12, ’html’ => 20 }

Pour recuperer la valeur associee a une cle

console.log(map.get(’php’));// affiche 17

Pour verifier l’existence d’une cle

console.log(map.has(’php’));// affiche true

Pour supprimer un element selon la cle

map.delete(’php’);

H & H: Research and Training 129 / 142

Page 263: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour recuperer la liste des cles d’un Map

console.log(map.keys());// affiche [Map Iterator] { ’java’, ’c’, ’html’, ’css’ }

Pour recuperer la liste des valeurs d’un Map

console.log(map.values());// affiche [Map Iterator] { 10, 12, 20, 12 }

Pour recuperer la liste des entrees d’un Map

console.log(map.entries());/* affiche[Map Entries] {[ ’java’, 10 ],[ ’c’, 12 ],[ ’html’, 20 ],[ ’css’, 12 ]

}*/

H & H: Research and Training 130 / 142

Page 264: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour recuperer la liste des cles d’un Map

console.log(map.keys());// affiche [Map Iterator] { ’java’, ’c’, ’html’, ’css’ }

Pour recuperer la liste des valeurs d’un Map

console.log(map.values());// affiche [Map Iterator] { 10, 12, 20, 12 }

Pour recuperer la liste des entrees d’un Map

console.log(map.entries());/* affiche[Map Entries] {[ ’java’, 10 ],[ ’c’, 12 ],[ ’html’, 20 ],[ ’css’, 12 ]

}*/

H & H: Research and Training 130 / 142

Page 265: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour recuperer la liste des cles d’un Map

console.log(map.keys());// affiche [Map Iterator] { ’java’, ’c’, ’html’, ’css’ }

Pour recuperer la liste des valeurs d’un Map

console.log(map.values());// affiche [Map Iterator] { 10, 12, 20, 12 }

Pour recuperer la liste des entrees d’un Map

console.log(map.entries());/* affiche[Map Entries] {[ ’java’, 10 ],[ ’c’, 12 ],[ ’html’, 20 ],[ ’css’, 12 ]

}*/

H & H: Research and Training 130 / 142

Page 266: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour parcourir un Map, on peut utiliser entries() (solution ES5)

for (let elt of map.entries())console.log(elt[0] + " " + elt[1]);

/* affichejava 10c 12html 20css 12*/

Depuis ES6, on peut faire

for (let [key, value] of map) {console.log(key, value);

}/* affichejava 10c 12html 20css 12*/

H & H: Research and Training 131 / 142

Page 267: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptPour parcourir un Map, on peut utiliser entries() (solution ES5)

for (let elt of map.entries())console.log(elt[0] + " " + elt[1]);

/* affichejava 10c 12html 20css 12*/

Depuis ES6, on peut faire

for (let [key, value] of map) {console.log(key, value);

}/* affichejava 10c 12html 20css 12*/

H & H: Research and Training 131 / 142

Page 268: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScript

On peut le faire aussi avec keys()

for (let key of map.keys()) {console.log(key + " " + map.get(key));

}/* affichejava 10c 12html 20css 12

*/

H & H: Research and Training 132 / 142

Page 269: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScript

Une deuxieme solution consiste a utiliser forEach (afficheseulement les valeurs)

map.forEach(elt => console.log(elt));

/* affiche10122012

*/

H & H: Research and Training 133 / 142

Page 270: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptOn peut aussi definir une methode et l’appeler dans forEach (afficheseulement les valeurs)

map.forEach(elt => afficher(elt));

function afficher(elt) {console.log(elt)

}

On peut encore simplifier l’appel de la fonction avec les callback(affiche seulement les valeurs)

map.forEach(afficher);

function afficher(elt){console.log(elt)

}

H & H: Research and Training 134 / 142

Page 271: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScriptOn peut aussi definir une methode et l’appeler dans forEach (afficheseulement les valeurs)

map.forEach(elt => afficher(elt));

function afficher(elt) {console.log(elt)

}

On peut encore simplifier l’appel de la fonction avec les callback(affiche seulement les valeurs)

map.forEach(afficher);

function afficher(elt){console.log(elt)

}

H & H: Research and Training 134 / 142

Page 272: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Map

TypeScript

Pour afficher les cles et les valeurs

map.forEach(afficher);

function afficher(value, key) {console.log(value, key)

}

/* affiche10 java12 c20 html12 css

*/

H & H: Research and Training 135 / 142

Page 273: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Set

Une collection ne contenant pas de doublons

Acceptant les types simples et objets

Les elements sont stockees et recuperes dans l’ordre d’insertion

Disponible depuis ES5 puis modifie dans ES6

Pour tester, utiliser l’option -t ES6

H & H: Research and Training 136 / 142

Page 274: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Set

Une collection ne contenant pas de doublons

Acceptant les types simples et objets

Les elements sont stockees et recuperes dans l’ordre d’insertion

Disponible depuis ES5 puis modifie dans ES6

Pour tester, utiliser l’option -t ES6

H & H: Research and Training 136 / 142

Page 275: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Pour creer un Set

let marques = new Set(["peugeot", "ford", "fiat", "mercedes"]);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’ }

Ajouter un element a un Set

marques.add(’citroen’);

Pour ajouter plusieurs elements a la fois

marques.add(’citroen’).add(’renault’);

H & H: Research and Training 137 / 142

Page 276: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Pour creer un Set

let marques = new Set(["peugeot", "ford", "fiat", "mercedes"]);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’ }

Ajouter un element a un Set

marques.add(’citroen’);

Pour ajouter plusieurs elements a la fois

marques.add(’citroen’).add(’renault’);

H & H: Research and Training 137 / 142

Page 277: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Pour creer un Set

let marques = new Set(["peugeot", "ford", "fiat", "mercedes"]);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’ }

Ajouter un element a un Set

marques.add(’citroen’);

Pour ajouter plusieurs elements a la fois

marques.add(’citroen’).add(’renault’);

H & H: Research and Training 137 / 142

Page 278: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScriptOn ne peut ajouter un element deux fois

marques.add(’peugeot’);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’, ’

citroen’, ’renault’ }

Pour verifier l’existence d’un element

console.log(marques.has(’fiat’));// affiche true

Pour supprimer un element

marques.delete(’ford’);console.log(marques);// affiche Set { ’peugeot’, ’fiat’, ’mercedes’, ’citroen’, ’

renault’ }

H & H: Research and Training 138 / 142

Page 279: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScriptOn ne peut ajouter un element deux fois

marques.add(’peugeot’);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’, ’

citroen’, ’renault’ }

Pour verifier l’existence d’un element

console.log(marques.has(’fiat’));// affiche true

Pour supprimer un element

marques.delete(’ford’);console.log(marques);// affiche Set { ’peugeot’, ’fiat’, ’mercedes’, ’citroen’, ’

renault’ }

H & H: Research and Training 138 / 142

Page 280: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScriptOn ne peut ajouter un element deux fois

marques.add(’peugeot’);console.log(marques);// affiche Set { ’peugeot’, ’ford’, ’fiat’, ’mercedes’, ’

citroen’, ’renault’ }

Pour verifier l’existence d’un element

console.log(marques.has(’fiat’));// affiche true

Pour supprimer un element

marques.delete(’ford’);console.log(marques);// affiche Set { ’peugeot’, ’fiat’, ’mercedes’, ’citroen’, ’

renault’ }

H & H: Research and Training 138 / 142

Page 281: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Autres methodes sur les Set

A.subSet(B) : retourne true si A est un sous-ensemble de B,false sinon.

A.union(B) : retourne un Set regroupant les elements de A etde B.

A.intersection(B) : retourne un Set contenant les elementsde A qui sont dans B.

A.difference(B) : retourne un Set contenant les elements deA qui ne sont pas dans B.

H & H: Research and Training 139 / 142

Page 282: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Pour parcourir un Set

for(let marque of marques) {console.log(marque)

}/* affichepeugeotfiatmercedescitroenrenault

*/

H & H: Research and Training 140 / 142

Page 283: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

Une deuxieme solution consiste a utiliser forEach

marques.forEach(elt => console.log(elt));

/* affichepeugeotfiatmercedescitroenrenault

*/

H & H: Research and Training 141 / 142

Page 284: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

On peut aussi definir une methode et l’appeler dans forEach

marques.forEach(elt => afficher(elt));

function afficher(elt){console.log(elt)

}

On peut encore simplifier l’appel de la fonction avec les callback

marques.forEach(afficher);

function afficher(elt){console.log(elt)

}

H & H: Research and Training 142 / 142

Page 285: TypeScript pour Angular - lis-lab.fr · TypeScript pour Angular Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur

Set

TypeScript

On peut aussi definir une methode et l’appeler dans forEach

marques.forEach(elt => afficher(elt));

function afficher(elt){console.log(elt)

}

On peut encore simplifier l’appel de la fonction avec les callback

marques.forEach(afficher);

function afficher(elt){console.log(elt)

}

H & H: Research and Training 142 / 142