TypeScript: langage de transition vers le futur JavaScript

Ce nouveau langage de Microsoft permet de disposer des possibilités de ECMAScript 6 et 7 maintenant, sans attendre leur implémentation dans les navigateurs.

C'est le premier langage de programmation dont l'usage se veut temporaire. Du fait d'une syntaxe similaire à celle de JavaScript et parce qu'il est compilé dans ce langage, il sera possible, une fois que les fonctions additionnelles qu'il apporte seront toutes implémentées par les interpréteurs, de remplacer le code TypeScript par un code JavaScript. Généré par le premier ou repris tel quel.
Donc les développeurs pourront supprimer l'étape de compilation en code JavaScript et TypeScript pourra disparaître! C'est différent de ce que propose Dart, qui offre les mêmes fonctions mais veut lui, remplacer JavaScript dans les navigateurs.
C'est un sur-ensemble de JavaScript: on peut reprendre un code écrit dans ce dernier, en faire un source TypeScript et y ajouter par exemple des classes et des interfaces.

TypeScript est utilisé en production avec des retours toujours positifs, car il améliore beaucoup le productivité, et on n'a jamais envie de revenir à JavaScript. Le seul inconvénient notable étant la lenteur de compilation sur les gros projets. C'est le langage de programmation d'Angular 2 (de Google).

Le compilateur est open source sous licence Apache et construit avec Node.js et Jake, une sorte de Make, conçu pour les projets JavaScript, où les makefiles sont remplacés par des jakefiles. Le code source est lui-même écrit en TypeScript, et converti en un fichier unique TypescriptServices.js (le compilateur), il utilise donc l'interpréteur V8 de Google!
Le code exécutable n'est pas fourni directement en téléchargement (on peut le produire soi-même) mais fait partie de Visual Studio 2013 ou sous forme de module npm.

TypeScript vs JavaScript
Le playground montre comment le code TypeScript devient du JavaScript

Les types statiques

La forme var x : boolean peut agacer dans un premier temps. Ecrire number x ou bool x comme en C aurait été plus simple. En suivant cette logique, au lieu d'écrire class x ou devrait écrire definition x : class.
Mais cela se justifie néanmoins ici par les types optionnels: on peut écrire var x et avoir une variable dynamique, et dont le type peut changer durant le traitement, ou ajouter un type statique. Le type est clairement une option, et cette syntaxe est dans la ligne de Asm.js ou de Julia.

Le langage comporte les types suivants:

Fonctions

Une fonction peut avoir des arguments génériques par surcharge ou par union.
Exemple d'union:

function(s:string | string[]) 

Classes et interfaces

La syntaxe pour déclarer une classe est similaire à celle d'ECMAScript 6 et en fait à celle la plupart des langages de programmation. On définit le constructeur par le mot réservé constructor, et on ajoute this pour référence un attribut dans la classe.

Par exemple:

class voiture {
  passagers = 4;
  constructor(personnes : number) {
    this.passagers = personnes;
  }
  
  mamethode(message : string) {
    console.log(message);
  }
}

var mavoiture = new voiture(2);

L'héritage se fait avec le mot-clé extends:

class voiture extends vehicule { ... }

Le constructeur peut appeler le constructeur de la classe héritée avec la méthode super(...) .
Les attributs étant publics par défaut, on a besoin seulement du mot-clé private pour déclarer un membre comme privé.
Le mot-réservé static peut s'appliquer au membres d'une classe afin de partager les valeurs assignées entre toutes les classes héritées.

L'héritage est traduit en JavaScript avec des prototypes tandis que les autres éléments servent seulement aux contrôles par le compilateur et ne sont pas convertis. Il est probable que le langage évoluera pour une traduction plus exacte quand ECMAScript sera largement implémenté.

Les classes peuvent être associées à des interfaces. Exemple:

class moteur extends voiture {
  puissance : number;
}
interface voiture {
  passagers : number;
}

var mavoiture : voiture = { passagers : 4, puissance : 300 };

On dispose donc à la fois de l'héritage et de la composition, ce que ne proposent pas les langages Go et Dart par exemple. Malheureusement ce ne semble pas non plus prévu pour ES 6 et pourra obliger à rester sur TypeScript si on en fait usage, car cela peut être extrêmement utile pour la réusabilité du code.

Autres additions

Je ne vais pas détailler toutes les fonctions de TypeScript, qui sont décrites en détails avec des exemples dans la documentation sur le site, mais donner un aperçu des autres possibilités du langage.

Fonctions manquantes

Des additions à ECMAScript et qui sont déjà implémentées dans les navigateurs ne sont pas mentionnées dans la spécification de TypeScript la plus récente:

Pourquoi utiliser TypeScript?

TypeScript devient de plus en plus populaire, comme le montrent les statistiques de Google Trends:

TypeScript vs les autres

L'avantage de TypeScript sur tous les autres langages qui sont compilés en JavaScript est qu'il en est un sur-ensemble: vous pouvez réutiliser un fichier JS et y inclure des fonctions ajoutées par TypeScript, puis renommer le fichier de .js en .ts.
Et quand le langage se développe, il se fait avec des fonctions définies dans ECMAScript 6 et suivant, et ainsi il reste un sur-ensemble de JS.

TypeScript semble indispensable pour réaliser un projet JavaScript de grande taille. Le code produit est optimisé pour les interpréteurs JIT. La réutilisabilité du code est grandement facilitée. Et on n'a pas à craindre pour l'avenir, même le code source sera facilement réutilisable sans le compilateur. Il a des lacunes, mais elle peuvent être comblées en combinant du code JavaScript avec le code TypeScript. Il ne résoud pas tous les problèmes de JS, parce que les problèmes de JS ne lui sont pas inhérents, ils viennent des navigateurs, du DOM ou de la méconnaissance du langage.
Il résoud essentiellement celui de la réusabilité du code. Et il nous évite l'utilisation de Dart qui fragmenterait la programmation sur le Web.

TypeScript. Le site officiel. Le langage a été créé par Anders Hejlsberg qui est aussi l'auteur de Turbo Pascal, C#.
Les auteurs du manual ont fait un effort particulier pour aider à apprendre le langage: chaque exemple peut être visualisé dans le playground où il peut être modifié, et est convertit en JS.

Télécharger le compilateur comme add-on pour Visual Studio. On peut l'obtenir sous Node avec la commande : npm install -g typescript.
Le langage est supporté outre VS par Eclipse et divers EDIs commerciaux.

Playground. Testez en direct la traduction d'un programme TypeScript en JavaScript.

Langages de programmation et de données Asm.js - Basic - C - C++ - C# - Dart - Eiffel - Go - Java - JavaScript - Julia - Pascal - PHP - Python - Prolog - Ruby - Scala - Scriptol - Swift - TypeScript - HTML - Wasm - XML - XAML - SQL