Hacking Mondays @PALOALTOURS
var name: string;
var x:number = 1;
var tab: string[] = ["hello", "world"];
function concat(i: number, o: any) : string {
return i.toString() + o;
}
function add(i: number, b?: number) : number {
return i + (b||0);
}
var myTuple: [string,string,number] = ["John", "Doe", 1983];
var name; var x = 1; var tab = ["hello", "world"]; name = "Hello"; // ok name = 3; // ok x = 5; // ok x = "cinq"; // KO tab = ["un", "deux"]; // ok tab = "trois" // KO
Le type peut être déduit à la compilation
function display(data: string|number) {
console.log("data: ", data);
}
function read(value:number|string): Date|number {
if (typeof value == "number") {
return value;
}
return new Date(value);
}
var value: string|number = 45; var test = <string>value;
// Fonctionne comme un joker
var foo: any = 45;
function bar(a: any, b) { // b est any, car pas de déduction de type ici
var test1: string = a; // ok
var test2: string = b; // ok
b = "foo"; // b reste any
var test3: number = b; // ok
a = b; // ok
}
function foo(x: number | string) {
if (typeof x === "string") {
return x.length; // x has type string here
}
else {
return x + 1; // x has type number here
}
}
Apporte à javsascript une approche de conception objet familière
Les classiques: public/private/protected et static
class Player {
score:number = 0;
constructor(public name:string) {
}
addScore(points:number) : void {
this.score += points;
}
private reset() {
this.score = 0;
}
static create(name:string, score:number): Player {
var player = new Player(name);
player.addScore(score);
return player;
}
}
** Tout est classique **
Parfois appelées pédantesquement expressions lambdas
function divideBy2(data) {
return data.map(function(el) {
return el/2;
});
}
Avec la notation ES6
function divideBy2(data: number[]) {
return data.map( (el) => el/2 );
}
function divideBy2(data: number[]) {
return data.map( (el) => el/2 );
}
function divideBy2(data: number[]) {
return data.map( (el) => {
return el/2;
});
}
Notation moins verbeuse
this n'est pas modifié
Correspond mieux au fonctionnement attendu Moins d'erreurs sur le this À préférer pour les débutants
Permet de rajouter des contraintes supplémentaires sur le typage
Marche aussi sur les classes