Slide 1

Slide 1 text

#experiences18 TypeScript: Why? When? How? Félix Billon (DCube) Sylvain PONTOREAU (Microsoft)

Slide 2

Slide 2 text

#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 ✋

Slide 21

Slide 21 text

#experiences18 Microsoft experiences18 Les fichiers de définition $ npm install --save-dev @types/angular { "name": "angular-with-dts", "version": "1.0.0", "dependencies": { "angular": "1.5.8" }, "devDependencies": { "@types/angular":"1.5.20" } } • Installation : • Contenu package.json :

Slide 22

Slide 22 text

#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); } }

Slide 26

Slide 26 text

#experiences18 Microsoft experiences18 L'asynchronisme getAnimals(): Promise { fetch("http://awesome-zoo.com") .then((response) => { response.json((data) => { return data; }); }); } async getAnimals(): Promise { const res = await fetch("…"); return await res.json(); } Compatible ES3+

Slide 27

Slide 27 text

#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 !

Slide 42

Slide 42 text

No content