#experiences18
Microsoft experiences18
Jeu-concours Twitter
Un pack Surface Go à gagner* !
*Voir toutes les conditions dans le règlement lié au jeu concours
Le tweet cumulant le plus de Retweets remporte la Surface Go (1 lot/jour)
1 Prenez une photo de la session à laquelle vous participez
2 Ajoutez #experienceslive et #experiences18 à votre tweet
3 Partagez !
#experienceslive
1
2
3
Slide 3
Slide 3 text
#experiences18
Microsoft experiences18
Félix Billon
Tech Lead
@felix_billon
Vos speakers pour cette session!
Sylvain Pontoreau
Premier Field Engineer
@spontoreau
Slide 4
Slide 4 text
#experiences18
Microsoft experiences18
Meetup- Paris TypeScript
#experiences18
@ParisTypeScript
Slide 5
Slide 5 text
#experiences18
Microsoft experiences18
Sommaire ## Introduction
## Typage
## Spécificités du langage
## Fonctionnement interne
## De JavaScript à TypeScript
## Conclusion
#experiences18
Slide 6
Slide 6 text
#experiences18
Microsoft experiences18
Introduction
Slide 7
Slide 7 text
#experiences18
Microsoft experiences18
Le commencement
• Octobre 2012 : preview.
• Avril 2014 : release 1.0.
Slide 8
Slide 8 text
#experiences18
Microsoft experiences18
Le renouveau
• Fin 2014 : Annonce d'AtScript.
• Mars 2015 : Angular 2 sera finalement basé sur TypeScript.
• Septembre 2016 : TypeScript 2.0 !
Slide 9
Slide 9 text
#experiences18
Microsoft experiences18
Où en est-on aujourd'hui ?
Popularité
Github npm
Stackoverflow
Slide 10
Slide 10 text
#experiences18
Microsoft experiences18
TypeScript dans le monde open source
Visual Studio Code Angular Ionic / Stencil rxjs
NativeScript TensorFlow.js NestJS vue.js
En cours
Slide 11
Slide 11 text
#experiences18
Microsoft experiences18
TypeScript chez Microsoft
Visual Studio Code CosmosDB BotBuilder Azure Isomorphic
Teams Skype Sharepoint Babylon.js
Slide 12
Slide 12 text
#experiences18
Microsoft experiences18
Vous êtes en bonne compagnie!
• Dashlane
Slide 13
Slide 13 text
#experiences18
Microsoft experiences18
Les outils de développement Microsoft
Visual Studio Visual Studio Code
Slide 14
Slide 14 text
#experiences18
Microsoft experiences18
Typage
Slide 15
Slide 15 text
#experiences18
Microsoft experiences18
Les types, pourquoi?
Slide 16
Slide 16 text
#experiences18
Microsoft experiences18
Les types basiques
• boolean, number, string, array, void, null, undefined, object.
let name: string;
let list: number[] = [1, 2, 3];
function fn(param: boolean): void {
// Do something
}
Slide 17
Slide 17 text
#experiences18
Microsoft experiences18
Classes et interfaces
interface Ninja {
nbShuriken: number;
throwShuriken: () => void;
}
class NinjaTurtle implements Ninja {
nbShuriken: number;
constructor() {
this.nbShuriken = 6;
}
throwShuriken(): void {
// Throw shuriken
};
}
let leonardo: Ninja = new NinjaTurtle();
let donatelo: NinjaTutle = new NinjaTurtle();
Slide 18
Slide 18 text
#experiences18
Microsoft experiences18
Les types, comment ?
any
Slide 19
Slide 19 text
#experiences18
Microsoft experiences18
Duck typings
class Order {
id: number;
}
class User {
id: number;
name: string;
}
function processOrder(order: Order) {
// Do something
}
const order: Order = {
id: 10
};
const user: User = {
id: 54,
name: "Félix"
};
processOrder(order);
processOrder(user); //
Slide 20
Slide 20 text
#experiences18
Microsoft experiences18
Les fichiers de définition
✋
#experiences18
Microsoft experiences18
Les spécificités du langage
Slide 23
Slide 23 text
#experiences18
Microsoft experiences18
Abstraction
abstract class Animal {
name: string;
abstract say(): void;
}
class Dog extends Animal {
}
class Dog extends Animal {
say(): void {
throw new Error("Not implemented.");
}
}
Slide 24
Slide 24 text
#experiences18
Microsoft experiences18
Retour sur les interfaces
interface Animal {
name: string;
say?: () => void;
}
interface Animal {
readonly name: string;
say?: () => void;
}
interface Say {
() => void;
}
Ne peut pas être
implémenté par une
classe !
Slide 25
Slide 25 text
#experiences18
Microsoft experiences18
La généricité
abstract class Animal {
readonly name: string;
constructor(name: string) {
this.name = name;
}
abstract say() : void;
}
class AnimalFactory {
ctor: new (name: string) => T;
constructor(ctor: new (name: string) => T) {
this.ctor = ctor;
}
create(name: string): T {
return new this.ctor(name);
}
}
#experiences18
Microsoft experiences18
Les modules, TypeScript à la rescousse!
export class Animal {
// …
}
import { Animal } from "./animal";
Slide 28
Slide 28 text
#experiences18
Microsoft experiences18
Les decorateurs
Slide 29
Slide 29 text
#experiences18
Microsoft experiences18
Les decorateurs
function log(target: object, key: string, descriptor: PropertyDescriptor) {
const calledFunction = descriptor.value;
descriptor.value = function () {
for(let i = 0, l = arguments.length; i < l; i++) {
console.log(arguments[i]);
}
return calledFunction.apply(this, arguments);
};
return descriptor;
}
Slide 30
Slide 30 text
#experiences18
Microsoft experiences18
Les decorateurs
class Calculator {
@log
sum(...numbers: number[]): number {
return numbers.reduce((previous, current) => previous + current);
}
}
const calculator = new Calculator();
const result = calculator.sum(1, 2, 3, 4, 5); //Affiche: 1 2 3 4 5
console.log(result); //Affiche 15
Slide 31
Slide 31 text
#experiences18
Microsoft experiences18
Fonctionnement interne
Slide 32
Slide 32 text
#experiences18
Microsoft experiences18
Architecture
Slide 33
Slide 33 text
#experiences18
Microsoft experiences18
tsconfig.json
• Fichier de configuration contenant les options de compilations.
• Initialisé à l'aide de la CLI :
• Exemple de contenue :
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"removeComments": true,
"sourceMap": true
},
"include": [
"src/**/*"
]
}
$ tsc --init
Slide 34
Slide 34 text
#experiences18
Microsoft experiences18
De JavaScript à TypeScript
Slide 35
Slide 35 text
#experiences18
Microsoft experiences18
JavaScript vers TypeScript
$ tsc --init
Slide 36
Slide 36 text
#experiences18
Microsoft experiences18
JavaScript vers TypeScript
// @ts-check
true
function sum(numbers) {
return numbers
.reduce(function(previous, next) {
return previous + next;
});
}
var result = sum([true, 2, "3"]);
console.log(result); // 33 ...
// @ts-check
/**
* @param {number[]} numbers
*/
function sum(numbers) {
return numbers
.reduce(function(previous, next) {
return previous + next;
});
}
var value = sum([true, 2, "3"]);
console.log(result); // 33 ...
Slide 37
Slide 37 text
#experiences18
Microsoft experiences18
Conclusion
Slide 38
Slide 38 text
#experiences18
Microsoft experiences18
Conclusion
Slide 39
Slide 39 text
#experiences18
Microsoft experiences18
Conclusion
Questions ?
Slide 40
Slide 40 text
#experiences18
Microsoft experiences18
Notez maintenant cette session
Rendez-vous sur la fiche de la session sur
http://experiences18.microsoft.fr
Cliquez sur le bouton « Evaluer »
#experienceslive
Slide 41
Slide 41 text
#experiences18
Microsoft experiences18
Merci à vous !