
TypeScript
Sur-ensemble de JavaScript open source et supportĂ© par nâimporte quel navigateur ou OS, dont le code sera compilĂ© en JavaScript avant dâĂȘtre interprĂ©tĂ©. De plus en plus utilisĂ© !!
Le premier intĂ©rĂȘt par rapport Ă JavaScript est la possibilitĂ© dâavoir un typage statique, ce qui nâamĂ©liore pas les performances mais amĂ©liore la lisibilitĂ© et la maintenance.
Le second intĂ©rĂȘt est de faire la POO avec TypeScript, qui permet de crĂ©er et utiliser des classes, interfaces, Ă©numĂ©rations, gĂ©nĂ©riques, modules (ou packages).
Mise en place
Installation via le terminal avec npm -g install typescript.
Transcompilation via le terminal avec npx tsc nomDuFichier.ts : cela va créer un fichier JavaScript (nomDuFichier.js).
let varTypee: string = âune stringâ; en TypeScript deviendra var varTypee = âune stringâ; en JavaScript.
Utilisation du TypeScript
Variables typées
La déclaration des variables se fait en précisant le type aprÚs le nom de la variable avec deux-points : let unBooleen: boolean = true;.
Les principaux types primitifs sont string, number et boolean, que lâon peut utiliser pour crĂ©er des tableaux avec number[] ou Array<number>.
Il existe un type spécial, any, qui permet de supprimer la vérification de type sur la variable et ne renvoie donc aucune erreur.
any.
ĂnumĂ©rations
// declaration
enum JoursSemaine { Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche };
// utilisation
let jourDuMarche: JoursSemaine = JoursSemaine.Mardi;
Classes
// declaration d'une classe
class Livre {
protected isbn: number;
protected titre: string;
protected auteur: string;
constructor(titre: string, auteur: string) {
this.titre = titre;
this.auteur = auteur;
}
public afficher():void {
console.log('Le titre de ce livre est ' + this.titre
+ ', son auteur est ' + this.auteur + '.');
}
}
// instanciation
let unLivre = new Livre("L'existentialisme est un humanisme", "Jean-Paul Sartre");
unLivre.afficher();
//Le titre de ce livre est L'existentialisme est un humanisme, son auteur est Jean-Paul Sartre.BP : Il est possible de dĂ©clarer les attributs directement le constructeur mais ce nâest pas recommandĂ© car cela diminue la lisibilitĂ© et la maintenabilitĂ©.
Héritage
// declaration d'une classe enfant
class Roman extends Livre {
private genre: string;
constructor(titre: string, auteur: string, genre: string) {
super(titre, auteur);
this.genre = genre;
}
public afficher(): void {
super.afficher();
console.log("C'est un roman du genre littéraire " + this.genre + ".");
}
}
// instanciation
let unRoman = new Roman("Darkest minds","Alexandra Bracken", "Dystopie");
unRoman.afficher();
//Le titre de ce livre est Darkest minds, son auteur est Alexandra Bracken.
//C'est un roman du genre littéraire Dystopie.
Interfaces
âSignature ou contrat dâune classeâ.
// declaration d'une interface
interface Vendable {
// - propriete optionnelle
promotion?: number;
etreVendu(librairie: string, nbExemplaires: number): void;
}
// declaration d'une classe qui l'implemente
class PieceDeTheatre extends Livre implements Vendable {
private premiereRepresentation: number;
constructor(titre: string, auteur: string, premiereRepresentation: number) {
super(titre, auteur);
this.premiereRepresentation = premiereRepresentation;
}
public afficher(): void {
super.afficher();
console.log("C'est une piÚce de théatre dont la premiÚre représentation eut lieu en "
+ this.premiereRepresentation + ".");
}
// - methode de l'interface a definir
public etreVendu(librairie: string, nbExemplaires: number): void {
console.log("La piÚce de théatre " + this.titre
+ " a été vendue par la librairie "
+ librairie + ", " + nbExemplaires + " fois.");
}
}
// instanciation
let unePiece = new PieceDeTheatre("Les Bonnes", "Jean Genet", 1947);
unePiece.afficher();
//Le titre de ce livre est Les Bonnes, son auteur est Jean Genet.
//C'est une piÚce de théatre dont la premiÚre représentation eut lieu en 1947.
unePiece.etreVendu("Mollat", 152);
//La piÚce de théatre Les Bonnes a été vendue par Mollat, 42 fois.Génériques
Un type gĂ©nĂ©rique est indiquĂ© avec la notation diamant <Type> et peut ĂȘtre utilisĂ© par exemple pour crĂ©er un tableau, une fonction ou une classe.
// tableaux
let unTableau: Array<number>;
let unAutreTableau: Array<string>;
// fonctions
function afficherUnMessage<T>(message: T): void {
console.log("Le message est : " + message);
}
afficherUnMessage("un message en chaine de caractĂšres");
afficherUnMessage(569684);
afficherUnMessage(true);
Modules
Un module est créé avec le mot-clĂ© module, il contient des instructions et des export de nâimporte quelle dĂ©claration (variable, fonction, classe, interfaceâŠ) puis il peut ĂȘtre import dans dâautres fichiers.
Expressions lambdas
Les expressions lambdas sont des fonctions fléchées, elles ne sont pas stockées en mémoire de façon classique mais exécutée à la volée.
let uneExpressionLambda = (a,b) => a+b;
console.log(uneExpressionLambda(5,4)); //9