TypeScript
TypeScript est un langage de programmation libre et open source développé par Microsoft qui a pour but d'améliorer et de sécuriser la production de code JavaScript. 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 est transcompilé en JavaScript, et peut ainsi être interprété par n'importe quel navigateur web ou moteur JavaScript. TypeScript a été cocréé par Anders Hejlsberg, principal inventeur de C# [3] - [4] - [5] - [6] - [7].
TypeScript | ||
Date de première version | 9 février 2012 | |
---|---|---|
Paradigme | Multi-paradigme | |
Auteur | Anders Hejlsberg... | |
Dernière version | 5.1.5 ()[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 | |
TypeScript permet un typage 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écification ECMAScript 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ête C++ peuvent décrire la structure des fichiers objets[8] 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 que jQuery et D3.js. Des en-têtes TypeScript pour les modules de base Node.js sont également disponibles, permettant le développement de programmes Node.js dans TypeScript.
Le compilateur TypeScript est lui-même écrit en TypeScript et compilé en JavaScript. Il est sous licence Apache License 2.0. TypeScript est inclus en tant que langage de programmation de première classe dans Microsoft Visual Studio 2013 Update 2 et versions ultérieures, à côté de C# et d'autres langages Microsoft. Une extension officielle permet également à Visual Studio 2012 de prendre en charge TypeScript. Anders Hejlsberg, architecte principal de C# et créateur de Delphi et Turbo Pascal, a travaillé sur le développement de TypeScript.
Historique
TypeScript a été rendu public en (à la version 0.8), après deux ans de développement interne chez Microsoft[9] - [10]. 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 de Microsoft Visual Studio, qui n’était pas disponible sur Linux et OS X[11] - [12].
L'environnement de développement Visual Studio Code, porté par le framework Electron (à l'initiative de Google Chromium), disponible sous Windows, MacOSX et Linux, permet désormais de combler ce vide.
Aujourd'hui, il existe un support dans d'autres IDE, en particulier dans Eclipse, via un plug-in fourni par Palantir Technologies. Divers éditeurs de texte, y compris Emacs, Vim, Webstorm, Atom et le propre 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é sur CodePlex, a été déplacé vers GitHub.
Le , TypeScript 2.0 est sorti; il a introduit plusieurs fonctionnalités, notamment la possibilité pour les programmeurs d'empêcher éventuellement l'attribution de valeurs "null" aux variables , parfois appelée l'erreur d'un milliard de dollars.
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[13].
Concept
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 norme ECMAScript 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 le typage statique facultatif qui permet une analyse statique du langage, ce qui facilite l'outillage et la prise en charge IDE.
Fonctionnalités
Le langage ajoute les fonctionnalités suivantes à ECMAScript 6 :
- Typage statique
- Typage générique
- Inférence de types
- Interfaces
- Classe, classe abstraite, expressions de classe
- Modules
- Mixin
- Énumérations
- Paramètres optionnels
- Unions
- Alias, alias de type générique
- Instruction
- Symboles
- Propriétés calculées
- Mots clés
let
,const
etfor … of
- Uplet
Depuis la version 1.6, la syntaxe JSX est supportée.
Typage statique
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.
var maValeurBooleenne: boolean = false;
// Création d'une variable contenant une chaîne de caractère.
var maChaineDeCaractere: string = "Hello World";
// Création d'une variable contenant un nombre.
var monNombre: number = 1;
// Création d'une fonction retournant une chaîne de caractère.
function maFonction(): string {
return "Ma valeur de retour";
}
Type générique
Il est également possible de créer des types génériques. Pour une méthode :
function maFonction<T>(parametre: T) {
// Contenu de la fonction.
}
Pour une classe :
class MaClasse<T> {
maVariable : T;
// Contenu de la classe.
}
// Création d'une instance de la classe "MaClasse" en définissant un type.
var monInstance = new MaClasse<string>();
monInstance.maVariable = "Hello World";
Exemple
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 :
interface MonInterface {
// Création d'une signature de variable.
maVariable: string;
// Création d'une signature de méthode.
maMethode(parametre: string): void;
}
class MaClasse implements MonInterface {
maVariable: string;
maMethode(parametre: string): void {
// Contenu de la méthode.
}
}
// Précision du type de la variable en utilisant l'interface.
var instance: MonInterface = new MaClasse();
DefinitelyTyped
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.
Classes
Le langage apporte le support des classes. L'héritage y est également pris en charge :
class MaClasseDeBase {
private _firstname;
private _lastname;
public constructor(firstname: string, lastname: string) {
this._firstname = firstname;
this._lastname = lastname;
}
public direBonjour(): string {
return "Bonjour " + this._firstname + ", " + this._lastname;
}
}
// La classe hérite de "MaClasseDeBase".
class MaClasse extends MaClasseDeBase {
public constructor(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".
var monInstance: MaClasse = new MaClasse("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
et protected
. Ce dernier est arrivé avec la version 1.3[14].
Modules
La création de module (que l'on peut qualifier d'espace de nommage) est permise en utilisant le mot-clé module
:
module mon.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 ou CommonJS[15].
Énumérations
L'utilisation d'énumération dans du code TypeScript est offerte à travers le mot-clé enum
.
Sans la définition de valeur à une constante :
enum Couleur {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 :
enum Couleur {Bleu = 0, Rouge = 1, Vert = 2};
Il est tout à fait possible de donner la valeur "1" (ou tout autre nombre) à la première constante.
Paramètres optionnels
Un paramètre peut être défini comme optionnel en TypeScript, en ajoutant le caractère ?
après le nom de la variable :
function maFonction(monParametre?: string) {
// On teste si le paramètre "monParametre" a une valeur.
//
// Je ne suis pas spécialiste de TypeScript mais écrire
// if (monParametre) {
// n'est pas correct ; le type de la condition DOIT être booléen.
//
if (monParametre!="") {
return monParametre;
} 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.
var resultat: string = maFonction();
// La valeur retournée sera : "Ma valeur".
var resultat: string = maFonction("Ma valeur");
Unions
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ère ou un tableau de chaîne de caractère.
function maFonction(monParametre: string|string[]): void {
if (typeof monParametre === "string") {
// Traitement de ma chaîne de caractère.
} else {
// Traitement de mon tableau.
}
}
Alias
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".
type MonAlias = number;
// Utilisation de l'alias ci-dessus.
var monNombre: MonAlias = 1;
Outils de développement
Compilateur
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 package npm
. 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].
Environnements de développement
Le compilateur peut être associé à divers environnements tel que :
- Microsoft Visual Studio 2013 Update 2
- Visual Studio Code[18]
- WebStorm[19]
- Eclipse
- Sublime Text
- Emacs[20]
- Codeanywhere[21]
- IntelliJ IDEA[22]
- Atom, au moyen d'un plugin apportant l'autocomplétion, la navigation, la mise en forme et la compilation
- AppleScript (Depuis MacOS Leopard)
Voir aussi
Liens externes
- (en) Site officiel
- TypeScript sur GitHub
Références
- « https://github.com/microsoft/TypeScript/releases/tag/v5.1.5 »
- « https://github.com/microsoft/TypeScript/releases/tag/v4.6-rc »
- Microsoft takes the wraps off TypeScript, a superset of JavaScript | ZDNet
- TypeScript: JavaScript Development at Application Scale - Somasegar's blog - Site Home - MSDN Blogs
- Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript? | ZDNet
- Microsoft Augments Javascript for Large-scale Development CIO.com
- http://www.siteduzero.com/news-62-45586-p1-microsoft-devoile-le-typescript-evolution-de-javascript.html
- Un fichier objet est un fichier contenant du code objet, c'est-à-dire un code machine au format déplaçable qui n'est généralement pas directement exécutable. Il existe différents formats pour les fichiers objets et le même code objet peut être conditionné dans différents fichiers objets. Un fichier objet peut également fonctionner comme une bibliothèque partagée.
- (en)Microsoft augments JavaScript for large-scale development
- (en)Announcing TypeScript 1.0
- (en)TypeScript: First Impressions
- (en)Microsoft TypeScript: Can the father of C# save us from the tyranny of JavaScript?
- (en) Wesley Wigham, « Release TypeScript 4.0.7 » , sur https://github.com, (consulté le )
- Announcing TypeScript 1.3
- An introduction to TypeScript’s module system
- Announcing TypeScript 1.4
- Compiler Options
- Using TypeScript in Visual Studio Code - MSDN Blogs
- TypeScript Support in WebStorm
- Sublime Text, Vi, Emacs: TypeScript enabled!
- Supported Syntax Highlighting and Themes : Support - Codeanywhere
- « IntelliJ IDEA 2016.2 Help :: TypeScript Support », sur www.jetbrains.com (consulté le )