| TypeScript | ||
![]() | ||
| Date de première version | (14 ans, 11 jours) | |
|---|---|---|
| Paradigme | Multi-paradigme | |
| Auteur | Anders Hejlsberg(co-auteur) | |
| Dernière version | 5.9 ()[1] | |
| Version en développement | 4.6 RC ()[2] | |
| Typage | dynamique,faible,fort optionnel,statique optionnel | |
| Influencé par | JavaScript C# Java CoffeeScript | |
| Écrit en | JavaScript et TypeScript | |
| Licence | Open Web Foundation, compilateur :Apache 2.0 | |
| Site web | www.typescriptlang.org | |
| Extension de fichier | ts et tsx | |
| modifier | ||
TypeScript est unlangage de programmationlibre développé parMicrosoft qui a pour but d'améliorer et de sécuriser la production de codeJavaScript. Il s'agit d'un sur-ensemble syntaxique strict de JavaScript (c'est-à-dire que tout code JavaScript correct peut être utilisé avec TypeScript). Le code TypeScript esttranscompilé en JavaScript et peut ainsi être interprété par n'importe quelnavigateur web oumoteur JavaScript. TypeScript a été cocréé parAnders Hejlsberg, principal inventeur deC#[3],[4],[5],[6].
TypeScript permet untypage statique optionnel des variables et des fonctions, la création de classes et d'interfaces, l'import de modules, tout en conservant l'approche non-contraignante de JavaScript. Il supporte la spécificationECMAScript 6.
TypeScript prend en charge les fichiers de définition qui peuvent contenir des informations sur le type des bibliothèques JavaScript existantes, tout comme les fichiers d'en-têteC++ peuvent décrire la structure des fichiers objets[7] existants. Cela permet à d'autres programmes d'utiliser les valeurs définies dans les fichiers comme s'il s'agissait d'entités TypeScript de type statique. Il existe des fichiers d'en-tête tiers pour les bibliothèques populaires telles quejQuery etD3.js. Des en-têtes TypeScript pour les modules de baseNode.js sont également disponibles, permettant le développement de programmes Node.js dans TypeScript.
Lecompilateur TypeScript est lui-même écrit en TypeScript et compilé en JavaScript. Il est sous licenceApache License 2.0. TypeScript est inclus en tant que langage de programmation de première classe dansMicrosoft Visual Studio 2013 Update 2 et versions ultérieures, à côté deC# et d'autres langagesMicrosoft. Une extension officielle permet également à Visual Studio 2012 de prendre en charge TypeScript.Anders Hejlsberg, architecte principal deC# et créateur deDelphi etTurbo Pascal, a travaillé sur le développement de TypeScript.
TypeScript a été rendu public en (à la version 0.8), après deux ans de développement interne chez Microsoft[8],[9]. Peu de temps après l'annonce,Miguel de Icaza a salué le langage lui-même, mais a critiqué le manque d'environnement de développement mature en dehors deMicrosoft Visual Studio, qui n’était pas disponible surLinux etOS X[10],[11].
L'environnement de développementVisual Studio Code, porté par le frameworkElectron(à l'initiative deGoogleChromium)[réf. nécessaire], disponible sous Windows, MacOSX et Linux, permet d'abord de combler ce vide. Un support se développe dans d'autres IDE, en particulier dansEclipse, via unplug-in fourni parPalantir Technologies. Diverséditeurs de texte, y comprisEmacs,Vim, Webstorm, Atom et même Visual Studio Code de Microsoft, prennent également en charge TypeScript.
TypeScript 0.9, publié en 2013, a ajouté la prise en charge des génériques. TypeScript 1.0 a été publié lors de la conférence des développeurs Microsoft Build en 2014.Visual Studio 2013 Update 2 fournit une prise en charge intégrée de TypeScript.
En, l'équipe de développement a annoncé un nouveau compilateur TypeScript, revendiquant 5 fois plus de performances. Simultanément, le code source, qui était initialement hébergé surCodePlex, a été déplacé versGitHub.
Le, TypeScript 2.0 est sorti. Cette version offre plusieurs nouvelles fonctionnalités, notamment la possibilité pour les programmeurs d'empêcher l'attribution de valeursnull aux variables, parfois appelée « erreur à un milliard de dollars (en) ».
TypeScript 3.0 a été publié le , apportant de nombreux ajouts de langage comme les tuples dans les paramètres de repos et les expressions réparties, les paramètres de repos avec les types de tuple, les paramètres de repos génériques, etc.
La version 4.0 de TypeScript a été publiée le 10 février 2021. Cette version n'apporte pas de changement majeur au langage[12].
Le 11 mars 2025,Microsoft annonce la réécriture du code source de TypeScript enGo. D'après les premiers tests effectués, ce changement de langage permet d'obtenir une compilation dix fois plus rapide que TypeScript 5.8. La nomenclature suivante sera établie pour suivre les deux versions de TypeScript qui coexisteront alors : les versions TypeScript 6.x (ou « Strada ») seront toujours développées en TypeScript et JavaScript, tandis que les versions TypeScript 7.x (ou « Corsa ») seront écrites en Go[13].
TypeScript a été conçu pour pallier les lacunes de JavaScript pour le développement d'applications à grande échelle à la fois chez Microsoft et chez leurs clients externes. Les défis liés à la gestion de code JavaScript complexe ont conduit à une demande d'outils personnalisés pour faciliter le développement de composants dans le langage.
Les développeurs de TypeScript ont cherché une solution qui ne romprait pas la compatibilité avec la norme et sa prise en charge multiplateforme. Sachant que la proposition de normeECMAScript actuelle promettait une prise en charge future de la programmation basée sur les classes, TypeScript était basé sur cette proposition. Cela a conduit à un compilateur JavaScript avec un ensemble d'extensions de langage syntaxique, un sur-ensemble basé sur la proposition, qui transforme les extensions en JavaScript standard. En ce sens, TypeScript était un aperçu de ce à quoi s'attendre d'ECMAScript 2015. Un aspect unique qui n'est pas dans la proposition, mais ajouté à TypeScript, est letypage statique facultatif qui permet uneanalyse statique du langage, ce qui facilite l'outillage et la prise en charge IDE.
Le langage ajoute les fonctionnalités suivantes àECMAScript 6 :
let,const etfor … ofDepuis la version 1.6, la syntaxeJSX est supportée.
Le langage permet de préciser le contenu d'une variable ou la valeur de retour d'une fonction (ou d'une méthode) :
// Création d'une variable contenant une valeur booléenne.varmaValeurBooleenne:boolean=false;// Création d'une variable contenant une chaîne de caractères.varmaChaineDeCaractere:string="Hello World";// Création d'une variable contenant un nombre.varmonNombre:number=1;// Création d'une fonction retournant une chaîne de caractères.functionmaFonction():string{return"Ma valeur de retour";}
Il est également possible de créer des types génériques. Pour une méthode :
functionmaFonction<T>(parametre:T){// Contenu de la fonction.}
Pour une classe :
classMaClasse<T>{maVariable:T;// Contenu de la classe.}// Création d'une instance de la classe "MaClasse" en définissant un type.varmonInstance=newMaClasse<string>();monInstance.maVariable="Hello World";
Les interfaces sont un concept essentiel et permettent d'avoir cette notion de typage. En créant une interface, il devient alors possible de l'utiliser pour préciser le contenu d'une variable ou d'une classe :
interfaceMonInterface{// Création d'une signature de variable.maVariable:string;// Création d'une signature de méthode.maMethode(parametre:string):void;}classMaClasseimplementsMonInterface{maVariable:string;maMethode(parametre:string):void{// Contenu de la méthode.}}// Précision du type de la variable en utilisant l'interface.varinstance:MonInterface=newMaClasse();
Une large bibliothèque d'interface, destinée à des classes (ou fonctions) qui ont été développés en JavaScript, est disponible sur un dépôt GitHub par borisyankov.
Le langage apporte le support des classes. L'héritage y est également pris en charge :
classMaClasseDeBase{private_firstname;private_lastname;publicconstructor(firstname:string,lastname:string){this._firstname=firstname;this._lastname=lastname;}publicdireBonjour():string{return"Bonjour "+this._firstname+", "+this._lastname;}}// La classe hérite de "MaClasseDeBase".classMaClasseextendsMaClasseDeBase{publicconstructor(firstname:string,lastname:string){// Accède au constructeur de "MaClasseDeBase".super(firstname,lastname);}}// Création d'une instance de "MaClasse" et// appel de la méthode: "direBonjour" de la classe parente : "MaClasseDeBase".varmonInstance:MaClasse=newMaClasse("Jean","Dupond");monInstance.direBonjour();
Comme il est montré dans l'exemple ci-dessus, le langage autorise les trois types de visibilités, à c'est-à-dire :public,private etprotected. Ce dernier est arrivé avec la version 1.3[14].
La création de module (que l'on peut qualifier d'espace de nommage) est permise en utilisant le mot-clémodule :
modulemon.espace.de.nom{// Contenu du module: classe, fonction, etc.}
TypeScript distingue les modules internes des modules externes. Les modules internes sont basées sur la syntaxe de ECMAScript 6, tandis que les modules externes exploitent une bibliothèque externe :AMD ouCommonJS[15].
L'utilisation d'énumération dans du code TypeScript est offerte à travers le mot-cléenum.
Sans la définition de valeur à une constante :
enumCouleur{Bleu,Rouge,Vert};
Il est à noter que, par défaut, la première constante de l'énumération aura pour valeur, 0.
Avec la définition de valeur :
enumCouleur{Bleu=0,Rouge=1,Vert=2};
Il est tout à fait possible de donner la valeur "1" (ou tout autre nombre) à la première constante.
Un paramètre peut être défini comme optionnel en TypeScript, en ajoutant le caractère? après le nom de la variable :
functionmaFonction(monParametre?:string){// On teste si le paramètre "monParametre" a une valeur.if(monParametre){returnmonParametre;}else{// Dans le cas contraire, une valeur par défaut est retournée.return"Hello World";}}// La valeur retournée sera : "Hello World" sans avoir un message d'avertissement lors de la compilation.varresultat:string=maFonction();// La valeur retournée sera : "Ma valeur".varresultat:string=maFonction("Ma valeur");
Les unions sont arrivées avec la version 1.4 du langage[16]. Cette fonctionnalité autorise l'ajout de multiples types pour le paramètre d'une fonction (ou d'une méthode) :
// La fonction autorise que le paramètre soit une chaîne de caractères ou un tableau de chaînes de caractères.functionmaFonction(monParametre:string|string[]):void{if(typeofmonParametre==="string"){// Traitement de ma chaîne de caractères.}else{// Traitement de mon tableau.}}
En plus des unions, la version 1.4 apporte la possibilité de créer des alias :
// Création d'un alias basé sur le type "number".typeMonAlias=number;// Utilisation de l'alias ci-dessus.varmonNombre:MonAlias=1;
Pour effectuer la transformation de code TypeScript en code JavaScript, un compilateur est nécessaire. Pour cela, il faut utiliser le compilateur, nommétsc. Il peut être installé depuis le gestionnaire de packagenpm. La version actuelle supporte, par défaut, la spécification ECMAScript 3. Il supporte également des fonctionnalités exclusives de la spécification ECMAScript 5 et 6 (en spécifiant dans les options du compilateur)[17].
Le compilateur peut être associé à divers environnements tel que :
| Analyse statique de programmes | ||
|---|---|---|
| Compilateur source à source | ||
| Concepts | ||
| Débogueur | ||
| Générateur de documentation | ||
| Éditeurs (comparaison (en)) | ||
| Moteur | ||
| Framework | ||
| Technologie associée | ||
| Gestionnaire de paquets | ||
| Côté serveur | ||
| Test unitaire | ||
| Personnalité | ||