SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
INTRODUCTION À
TYPESCRIPT
Par Félix Billon
SOMMAIRE
1. Langage transcompilé
2. TypeScript
3. Écosystème
4. Les alternatives
5. Roadmap
LANGAGE TRANSCOMPILÉ : KÉZAKO
Langage pouvant être compilé en un autre langage.
Transcompilateur/transpileur ou encore compilateur
source à source.
Langage existant ou surcouche d'un langage
existant.
LANGAGE TRANSCOMPILÉ : EXEMPLE
SCSS/SASS/LESS ­> CSS
TypeScript/CoffeeScript/Flow/JSX ­> JavaScript
C# ­> JavaScript (DuoCode)
C++ ­> C (cfront)
Go ­> JavaScript (Go2js)
C++/C ­> JavaScript (Emscripten)
La bible des langages transcompilés en JavaScript
LANGAGE TRANSCOMPILÉ :
AVANTAGES
Étend les fonctionnalités d'un langage existant.
Améliore la lisibilité et scalabilité du code.
Amène une phase de compilation aux langages
interprétés.
Permet d'écrire du code "futuriste".
LANGAGE TRANSCOMPILÉ :
DÉSAVANTAGES
Prisonnier du langage transpilé choisi.
Lié au développement de l'écosystème.
TYPESCRIPT : LE CHOIX
Retour d'XP sur le choix de TypeScript.
“TypeScript c'est naze, ça apporte trop de
verbosité le code devient illisible.”
“C'est open­source.”
“La communauté est inexistante.”
“On n'aime pas le JavaScript, TypeScript
nous donnera l'impression de faire du C#.”
TYPESCRIPT : KÉZAKO
Langage transcompilé en JavaScript.
Support d'EcmaScript 3 et 5 (bientôt ).ES6
Utilisation de polyfills.
Mis en place et suivi par Microsoft.
Grande équipe de contributeur (dont Anders
Hejlsberg).
Open­source, source disponible sur github.
TYPESCRIPT : BREF HISTORIQUE
Preview depuis Octobre 2012
Avril 2014 : Release 1.0
Mars 2015 : 1.5­alpha
TYPESCRIPT : LES TYPES I
Static type checker !
Servent uniquement au compilateur (ne génère pas
de code).
Type : boolean, number, string, Array, Date, ...
var x: string;
var y: number;
var z: number[];
var t: Date;
function convert(foo: boolean, bar: Array‹string›): void {
      //...
}
z = 42; //Erreur
y = 'Bonjour'; //Erreur
convert(true, ['Hello','World']); //OK
t.toFixed(1) //Erreur
TYPESCRIPT : LES TYPES II
Type spécial 'any', accepte tous les types.
Possibilité de mettre plusieurs types séparés par un
pipe (typescript 1.3)
Possibilité de définir des alias (typescript 1.4)
type PrimitiveArray = Array‹string|number|boolean›;         
var x: string | number;
var y: PrimitiveArray;
var z: any;
y = ['Bonjour', 42, true]; //OK
z = 4; //OK
z = 'Bonjour'; //OK
x = true; //Erreur
TYPESCRIPT : LES INTERFACES
Servent uniquement au compilateur (ne génère pas
de code).
Différent types : array, function, class et hybrid.
Possibilité d'étendre une interface.
//Interface type class          
interface IAnimal {
  nbPatte: number;
  mange(nourriture: string): void;
  nbAile?: boolean; //Propriété optionnelle
}
//Interface type function 
interface IAddFn {
  (nb: number, nb2: number): number;
}
var addFn: IAddFn;
var addFn = function(nb: number, nb2: number): number {
    //...
}
TYPESCRIPT : LES CLASSES I
class Chien implements IAnimal {
  //Propriété privée accessible via Getter/Setter
  private _nbPatte: number;
  get nbPatte(): number {
            return this._nbPatte;
  }
  set nbPatte(newnbPatte: number){
            this._nbPatte = newnbPatte;
  }
 
  //Propriété public 
  public couleur: string;
 
  //Constructeur 
  constructor(couleur: string) {
            this.couleur = couleur;
            this.nbPatte = 4;
  }
 
TYPESCRIPT : LES CLASSES II
Sucre syntaxique en attendant l'implementation ES6
(polyfill).
Constructeur avec ou sans paramètre.
Accesseur public, privé et protected.
Héritage et implémentation d'interface.
Propriété static.
Accesseurs (get/set seulement avec ES5).
TYPESCRIPT : LES MODULES
Module externe : syntaxe CommonJS, AMD et
bientôt ES6
Module interne pour namespace.
/**********************************­Module externe­********************************/
         
//Chien.ts        
export class Chien {
  //...
}
//Main.ts   
import chien = require('./Chien');
var x = new chien();
/**********************************­Module interne­********************************/
     
//TypeAnimal.ts
module Animal {
  export class Vertebrer {
    //...
  }
  export module Invertebrer {
    //...
TYPESCRIPT : LES FONCTIONS
Paramètre optionel et paramètre avec valeur par
défaut.
Paramètre rest.
Fonction fléchée ou lambda.
function cuisiner(viande: string, ...assaisonnement: Array‹string›): void {
        var listAssaisonnement: string = assaisonnement.join(',');
}
function nettoyer(instrument = "éponge"): void {
        //...
}     
var decorer = (viande: string, decoration: Array‹string›): string 
=> (viande + decoration.join(','));
TYPESCRIPT : FICHIERS DE DÉFINITIONS
Définition d'une librairie externe.
Existe pour les librairies les plus utilisées (Jquery,
AngularJs, D3Js, node, grunt, karma, ...)
Permet d'avoir l'auto­complétion, détection de type
static et documentation (JsDoc).
/// ‹reference path="./angularjs/angular.d.ts" /›       
var $filter: ng.IFilterService;
var $scope: ng.IScope;
$scope.toto(); //Error
$scope.$digest(); //Ok
ÉCOSYSTÈME : IDE
Visual Studio ( , et 2015) / Microsoft2012 2013
Webstorm / JetBrain
Brackets / Adobe
Atom / Github
Eclipse
Sublime text
ÉCOSYSTÈME : DIVERS
Analyse de code (tslint).
Intégration à gulp, grunt, broccoli, ...
Pre­processor karma.
Support JsDoc.
Support webpack, browserify, ...
LES ALTERNATIVES : DART
Ecosystème dédié (IDE, VM, ...).
Langage standardisé auprès de l'ECMA depuis
décembre 2013.
Permet de réaliser des applis desktop et web.
Peut utiliser une machine virtuelle.
Plus fourni que TypeScript : metadata, méthode
abstraite, ...
Site officiel
LES ALTERNATIVES : COFFEESCRIPT
Static type checker ? NO !
Simplification de la syntaxe du JavaScript.
Intégration des évolutions proposées par ES6.
Grande communauté et écosystème développé.
Site officiel
LES ALTERNATIVES : FLOW
Static type checker !
Mis en place et suivi par Facebook.
Opposé à TypeScript sur plusieurs notions (mixed et
any, type non­null,...).
Roadmap ambicieuse : intégration d'ES6, intégration
IDE, fichiers de définitions...
Se pose clairement comme un concurrent de
TypeScript.
Site officiel
ROADMAP
1.6 : generator (ES6) et async/await (ES7).
2.0 : intégration des features les plus demandées
(mixins, classes abstraites, ...).
MERCI À TOUS !

Contenu connexe

Tendances

Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScripttarkan_
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp FrGregory Renard
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Swift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleSwift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleDamien GOSSET
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1ISIG
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Parischristophep21
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Microsoft
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPjulien pauli
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads France
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)ISIG
 

Tendances (20)

Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Introdot Netc Sharp Fr
Introdot Netc Sharp FrIntrodot Netc Sharp Fr
Introdot Netc Sharp Fr
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
Swift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'AppleSwift, opportunités et perspectives du dernier langage d'Apple
Swift, opportunités et perspectives du dernier langage d'Apple
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Cours VB 2012 seance 1
Cours VB 2012 seance 1Cours VB 2012 seance 1
Cours VB 2012 seance 1
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
XebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vieXebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vie
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
C++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in ParisC++ 11 - Tech Days 2014 in Paris
C++ 11 - Tech Days 2014 in Paris
 
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Cours1
Cours1Cours1
Cours1
 
AlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHPAlterWay SolutionsLinux Outils Industrialisation PHP
AlterWay SolutionsLinux Outils Industrialisation PHP
 
CocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - EpitezCocoaHeads Toulouse - Xcode et les tests - Epitez
CocoaHeads Toulouse - Xcode et les tests - Epitez
 
Plugins Xcode
Plugins XcodePlugins Xcode
Plugins Xcode
 
Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)Programmation événementielle avec VB (ISIG)
Programmation événementielle avec VB (ISIG)
 

En vedette

Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2Laurent Duveau
 
Angular 2 : le réveil de la force
Angular 2 : le réveil de la forceAngular 2 : le réveil de la force
Angular 2 : le réveil de la forceNicolas PENNEC
 
Introducing type script
Introducing type scriptIntroducing type script
Introducing type scriptRemo Jansen
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?FITC
 
Angular 2 - Core Concepts
Angular 2 - Core ConceptsAngular 2 - Core Concepts
Angular 2 - Core ConceptsFabio Biondi
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2Knoldus Inc.
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2FITC
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painSander Mak (@Sander_Mak)
 
La mission du responsable d'équipe END
La mission du responsable d'équipe ENDLa mission du responsable d'équipe END
La mission du responsable d'équipe ENDenddiapo
 
Line A Del Tiempo
Line A Del TiempoLine A Del Tiempo
Line A Del TiempoRaul
 
Soutenance power point(sousa roldão)
Soutenance power point(sousa roldão)Soutenance power point(sousa roldão)
Soutenance power point(sousa roldão)paulo paolo
 

En vedette (20)

Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
Angular 2 : le réveil de la force
Angular 2 : le réveil de la forceAngular 2 : le réveil de la force
Angular 2 : le réveil de la force
 
Introduction à Angular 2
Introduction à Angular 2Introduction à Angular 2
Introduction à Angular 2
 
TypeScript intro
TypeScript introTypeScript intro
TypeScript intro
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Introducing type script
Introducing type scriptIntroducing type script
Introducing type script
 
TypeScript Presentation
TypeScript PresentationTypeScript Presentation
TypeScript Presentation
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Typescript ppt
Typescript pptTypescript ppt
Typescript ppt
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?
 
Angular 2 - Core Concepts
Angular 2 - Core ConceptsAngular 2 - Core Concepts
Angular 2 - Core Concepts
 
Introduction to Angular 2
Introduction to Angular 2Introduction to Angular 2
Introduction to Angular 2
 
Getting Started with Angular 2
Getting Started with Angular 2Getting Started with Angular 2
Getting Started with Angular 2
 
TypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the painTypeScript: coding JavaScript without the pain
TypeScript: coding JavaScript without the pain
 
La mission du responsable d'équipe END
La mission du responsable d'équipe ENDLa mission du responsable d'équipe END
La mission du responsable d'équipe END
 
Line A Del Tiempo
Line A Del TiempoLine A Del Tiempo
Line A Del Tiempo
 
Soutenance power point(sousa roldão)
Soutenance power point(sousa roldão)Soutenance power point(sousa roldão)
Soutenance power point(sousa roldão)
 
Viaje
ViajeViaje
Viaje
 
Sondage janvier 2013
Sondage janvier 2013Sondage janvier 2013
Sondage janvier 2013
 

Similaire à Introduction TypeScript

20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdfRihabBENLAMINE
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJsimeon
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsCocoaHeads France
 
Lightning talk Mouf au PHPForum (Paris)
Lightning talk Mouf au PHPForum (Paris)Lightning talk Mouf au PHPForum (Paris)
Lightning talk Mouf au PHPForum (Paris)David Négrier
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMXpprem
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?pprem
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieLoic Yon
 
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de réseau IO...
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de  réseau IO...Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de  réseau IO...
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de réseau IO...SmainBelhadef2
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Jean-Marc Fontaine
 

Similaire à Introduction TypeScript (20)

SystemC
SystemCSystemC
SystemC
 
Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015Compte rendu Blend Web Mix 2015
Compte rendu Blend Web Mix 2015
 
Go
GoGo
Go
 
Flex4.5 air3.0
Flex4.5 air3.0Flex4.5 air3.0
Flex4.5 air3.0
 
Linux Scripting
Linux Scripting Linux Scripting
Linux Scripting
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Apple : iOS
Apple : iOSApple : iOS
Apple : iOS
 
0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf0519-pdf-php-bases-initiation.pdf
0519-pdf-php-bases-initiation.pdf
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et JenkinsBuild automatique et distribution OTA avec Xcode 4.x et Jenkins
Build automatique et distribution OTA avec Xcode 4.x et Jenkins
 
Lightning talk Mouf au PHPForum (Paris)
Lightning talk Mouf au PHPForum (Paris)Lightning talk Mouf au PHPForum (Paris)
Lightning talk Mouf au PHPForum (Paris)
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Découvrez FireDAC pour FMX
Découvrez FireDAC pour FMXDécouvrez FireDAC pour FMX
Découvrez FireDAC pour FMX
 
Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?Quoi de neuf dans la version 11 Alexandria ?
Quoi de neuf dans la version 11 Alexandria ?
 
Linux 101 slides-fr
Linux 101 slides-frLinux 101 slides-fr
Linux 101 slides-fr
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
Php seance1
Php seance1Php seance1
Php seance1
 
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de réseau IO...
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de  réseau IO...Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de  réseau IO...
Telecom S4 Chapitre 1 Configuration d'un système d'exploitation de réseau IO...
 
Tour Horizont.Net
Tour Horizont.NetTour Horizont.Net
Tour Horizont.Net
 
Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012Gestion des dépendances dans un projet PHP - Forum PHP 2012
Gestion des dépendances dans un projet PHP - Forum PHP 2012
 

Plus de felixbillon

typescript_cdktf.pptx
typescript_cdktf.pptxtypescript_cdktf.pptx
typescript_cdktf.pptxfelixbillon
 
Un problème 10 solutions : Azure Fighter
Un problème 10 solutions : Azure FighterUn problème 10 solutions : Azure Fighter
Un problème 10 solutions : Azure Fighterfelixbillon
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practicesfelixbillon
 
Présentation et dernières nouveautés Microsoft Bot
Présentation et dernières nouveautés Microsoft BotPrésentation et dernières nouveautés Microsoft Bot
Présentation et dernières nouveautés Microsoft Botfelixbillon
 
Global Azure Bootcamp 2018 - Microsoft Bot
Global Azure Bootcamp 2018 - Microsoft BotGlobal Azure Bootcamp 2018 - Microsoft Bot
Global Azure Bootcamp 2018 - Microsoft Botfelixbillon
 
Présentation Google Cloud Vision API
Présentation Google Cloud Vision APIPrésentation Google Cloud Vision API
Présentation Google Cloud Vision APIfelixbillon
 
Typescript + Graphql = <3
Typescript + Graphql = <3Typescript + Graphql = <3
Typescript + Graphql = <3felixbillon
 
Service cognitifs : vue d'ensemble
Service cognitifs : vue d'ensembleService cognitifs : vue d'ensemble
Service cognitifs : vue d'ensemblefelixbillon
 

Plus de felixbillon (8)

typescript_cdktf.pptx
typescript_cdktf.pptxtypescript_cdktf.pptx
typescript_cdktf.pptx
 
Un problème 10 solutions : Azure Fighter
Un problème 10 solutions : Azure FighterUn problème 10 solutions : Azure Fighter
Un problème 10 solutions : Azure Fighter
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
Présentation et dernières nouveautés Microsoft Bot
Présentation et dernières nouveautés Microsoft BotPrésentation et dernières nouveautés Microsoft Bot
Présentation et dernières nouveautés Microsoft Bot
 
Global Azure Bootcamp 2018 - Microsoft Bot
Global Azure Bootcamp 2018 - Microsoft BotGlobal Azure Bootcamp 2018 - Microsoft Bot
Global Azure Bootcamp 2018 - Microsoft Bot
 
Présentation Google Cloud Vision API
Présentation Google Cloud Vision APIPrésentation Google Cloud Vision API
Présentation Google Cloud Vision API
 
Typescript + Graphql = <3
Typescript + Graphql = <3Typescript + Graphql = <3
Typescript + Graphql = <3
 
Service cognitifs : vue d'ensemble
Service cognitifs : vue d'ensembleService cognitifs : vue d'ensemble
Service cognitifs : vue d'ensemble
 

Introduction TypeScript

  • 2. SOMMAIRE 1. Langage transcompilé 2. TypeScript 3. Écosystème 4. Les alternatives 5. Roadmap
  • 3. LANGAGE TRANSCOMPILÉ : KÉZAKO Langage pouvant être compilé en un autre langage. Transcompilateur/transpileur ou encore compilateur source à source. Langage existant ou surcouche d'un langage existant.
  • 4. LANGAGE TRANSCOMPILÉ : EXEMPLE SCSS/SASS/LESS ­> CSS TypeScript/CoffeeScript/Flow/JSX ­> JavaScript C# ­> JavaScript (DuoCode) C++ ­> C (cfront) Go ­> JavaScript (Go2js) C++/C ­> JavaScript (Emscripten) La bible des langages transcompilés en JavaScript
  • 5. LANGAGE TRANSCOMPILÉ : AVANTAGES Étend les fonctionnalités d'un langage existant. Améliore la lisibilité et scalabilité du code. Amène une phase de compilation aux langages interprétés. Permet d'écrire du code "futuriste".
  • 6. LANGAGE TRANSCOMPILÉ : DÉSAVANTAGES Prisonnier du langage transpilé choisi. Lié au développement de l'écosystème.
  • 7. TYPESCRIPT : LE CHOIX Retour d'XP sur le choix de TypeScript. “TypeScript c'est naze, ça apporte trop de verbosité le code devient illisible.” “C'est open­source.” “La communauté est inexistante.” “On n'aime pas le JavaScript, TypeScript nous donnera l'impression de faire du C#.”
  • 8. TYPESCRIPT : KÉZAKO Langage transcompilé en JavaScript. Support d'EcmaScript 3 et 5 (bientôt ).ES6 Utilisation de polyfills. Mis en place et suivi par Microsoft. Grande équipe de contributeur (dont Anders Hejlsberg). Open­source, source disponible sur github.
  • 9. TYPESCRIPT : BREF HISTORIQUE Preview depuis Octobre 2012 Avril 2014 : Release 1.0 Mars 2015 : 1.5­alpha
  • 10. TYPESCRIPT : LES TYPES I Static type checker ! Servent uniquement au compilateur (ne génère pas de code). Type : boolean, number, string, Array, Date, ... var x: string; var y: number; var z: number[]; var t: Date; function convert(foo: boolean, bar: Array‹string›): void {       //... } z = 42; //Erreur y = 'Bonjour'; //Erreur convert(true, ['Hello','World']); //OK t.toFixed(1) //Erreur
  • 11. TYPESCRIPT : LES TYPES II Type spécial 'any', accepte tous les types. Possibilité de mettre plusieurs types séparés par un pipe (typescript 1.3) Possibilité de définir des alias (typescript 1.4) type PrimitiveArray = Array‹string|number|boolean›;          var x: string | number; var y: PrimitiveArray; var z: any; y = ['Bonjour', 42, true]; //OK z = 4; //OK z = 'Bonjour'; //OK x = true; //Erreur
  • 12. TYPESCRIPT : LES INTERFACES Servent uniquement au compilateur (ne génère pas de code). Différent types : array, function, class et hybrid. Possibilité d'étendre une interface. //Interface type class           interface IAnimal {   nbPatte: number;   mange(nourriture: string): void;   nbAile?: boolean; //Propriété optionnelle } //Interface type function  interface IAddFn {   (nb: number, nb2: number): number; } var addFn: IAddFn; var addFn = function(nb: number, nb2: number): number {     //... }
  • 13. TYPESCRIPT : LES CLASSES I class Chien implements IAnimal {   //Propriété privée accessible via Getter/Setter   private _nbPatte: number;   get nbPatte(): number {             return this._nbPatte;   }   set nbPatte(newnbPatte: number){             this._nbPatte = newnbPatte;   }     //Propriété public    public couleur: string;     //Constructeur    constructor(couleur: string) {             this.couleur = couleur;             this.nbPatte = 4;   }  
  • 14. TYPESCRIPT : LES CLASSES II Sucre syntaxique en attendant l'implementation ES6 (polyfill). Constructeur avec ou sans paramètre. Accesseur public, privé et protected. Héritage et implémentation d'interface. Propriété static. Accesseurs (get/set seulement avec ES5).
  • 15. TYPESCRIPT : LES MODULES Module externe : syntaxe CommonJS, AMD et bientôt ES6 Module interne pour namespace. /**********************************­Module externe­********************************/           //Chien.ts         export class Chien {   //... } //Main.ts    import chien = require('./Chien'); var x = new chien(); /**********************************­Module interne­********************************/       //TypeAnimal.ts module Animal {   export class Vertebrer {     //...   }   export module Invertebrer {     //...
  • 16. TYPESCRIPT : LES FONCTIONS Paramètre optionel et paramètre avec valeur par défaut. Paramètre rest. Fonction fléchée ou lambda. function cuisiner(viande: string, ...assaisonnement: Array‹string›): void {         var listAssaisonnement: string = assaisonnement.join(','); } function nettoyer(instrument = "éponge"): void {         //... }      var decorer = (viande: string, decoration: Array‹string›): string  => (viande + decoration.join(','));
  • 17. TYPESCRIPT : FICHIERS DE DÉFINITIONS Définition d'une librairie externe. Existe pour les librairies les plus utilisées (Jquery, AngularJs, D3Js, node, grunt, karma, ...) Permet d'avoir l'auto­complétion, détection de type static et documentation (JsDoc). /// ‹reference path="./angularjs/angular.d.ts" /›        var $filter: ng.IFilterService; var $scope: ng.IScope; $scope.toto(); //Error $scope.$digest(); //Ok
  • 18. ÉCOSYSTÈME : IDE Visual Studio ( , et 2015) / Microsoft2012 2013 Webstorm / JetBrain Brackets / Adobe Atom / Github Eclipse Sublime text
  • 19. ÉCOSYSTÈME : DIVERS Analyse de code (tslint). Intégration à gulp, grunt, broccoli, ... Pre­processor karma. Support JsDoc. Support webpack, browserify, ...
  • 20. LES ALTERNATIVES : DART Ecosystème dédié (IDE, VM, ...). Langage standardisé auprès de l'ECMA depuis décembre 2013. Permet de réaliser des applis desktop et web. Peut utiliser une machine virtuelle. Plus fourni que TypeScript : metadata, méthode abstraite, ... Site officiel
  • 21. LES ALTERNATIVES : COFFEESCRIPT Static type checker ? NO ! Simplification de la syntaxe du JavaScript. Intégration des évolutions proposées par ES6. Grande communauté et écosystème développé. Site officiel
  • 22. LES ALTERNATIVES : FLOW Static type checker ! Mis en place et suivi par Facebook. Opposé à TypeScript sur plusieurs notions (mixed et any, type non­null,...). Roadmap ambicieuse : intégration d'ES6, intégration IDE, fichiers de définitions... Se pose clairement comme un concurrent de TypeScript. Site officiel
  • 23. ROADMAP 1.6 : generator (ES6) et async/await (ES7). 2.0 : intégration des features les plus demandées (mixins, classes abstraites, ...).