Générer du code NodeJS avec TypeScript

La semaine dernière, Microsoft à rendu public TypeScript, que l’on peut considérer comme à un sur-ensemble du langage (de script) JavaScript. Avec TypeScript, on retrouve des termes bien connus des développeurs C++,C# ou Java comme l’écriture de classes ou le typage statique. L’étape de compilation va consister à générer du JavaScript (ben oui, les navigateurs ne comprennent que ça) à partir du code écrit en TypeScript.

NodeJS pour ce qui ne connaissent pas et pour faire très simple (mais vraiment très simple), c’est du JavaScript qui s’exécute côté serveur.

Cette semaine, sur la page Facebook de la communauté ZeCloud (communauté sur Windows Azure animée par 2 MVPs Microsoft : Wilfried Woivré et Aymeric Weinbach), Benjamin Guinebertière (qu’on ne présente plus) a émit l’idée de générer du code NodeJS (donc du JavaScript) avec TypeScript. J’avoue que j’ai mis du temps avant de le comprendre car dans mon cerveau de vieux développeur, JavaScript étant toujours associé à la partie cliente.

Le but de ce billet n’est vraiment pas de vous expliquer TypeScript ou NodeJS (je ne maitrise ni l’un ni l’autre), mais juste de voir comment on peut faire fonctionner ensemble les « Hello World! » de ces deux technologies.

Hello world! en NodeJS

Le plus simple (enfin pour ce qui sont sous Windows), c’est d’installer WebMatrix 2 puis d’ouvrir le template de site Node.js « Empty Site ». Webmatrix va alors se charger d’installer tout ce qu’il faut pour travailler avec NodeJS.

Installation de TypeScript

Si vous avez installé NodeJS via WebMatrix, vous avez alors également installé Node Package Manager (NPM). Dans mon cas il se trouve dans le même répertoire que NodeJS (C:\Program Files (x86)\nodejs).

L’installation de du module TypeScript pour NodeJS se fait avec la commande suivante:

npm install -g typescript

Tsc (le compilateur TypeScript) est maintenant installé.

Le code

Ajouter à votre site web un fichier vide nommé server.ts avec le code suivant (le but est de typer un paramètre):

interface Person {
    firstname: string;
    lastname: string;
}

function hello(person : Person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}

var http = require('http');

http.createServer(function (req, res) {
    var user = {firstname: "Jane", lastname: "User"};
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end(hello(user));

}).listen(process.env.PORT || 8080);

Compilez ensuite votre code avec la commande suivante:

tsc server.ts

Cela va écraser le fichier server.js initial (avec des warnings de compilation je vous l’accorde) :

Et générer le code suivant:

function hello(person) {
    return "Hello, " + person.firstname + " " + person.lastname;
}
var http = require('http');
http.createServer(function (req, res) {
    var user = {
        firstname: "Jane",
        lastname: "User"
    };
    res.writeHead(200, {
        'Content-Type': 'text/html'
    });
    res.end(hello(user));
}).listen(process.env.PORT || 8080);

On voit bien que le compilateur a généré du Javascript (le typage a disparu), et si on lance le serveur NodeJS, on obtient le résultat attendu. Nous avons donc généré via TypeScript du Javascript qui visiblement est interprété correctement par le serveur NodeJS.

Conclusion

Heuuuu… déjà il faut améliorer le truc en faisant effectuer la compilation par le serveur NodeJS (puisqu’il y a un module dédié TypeScript pour NodeJS ça ne doit pas poser trop de problème de compiler les fichiers ts au moins au démarrage du serveur avant de penser à faire du JIT), et ensuite j’avoue que je suis quand même séduit par l’idée de profiter d’un véritable compilateur pour générer du JavaScript… à suivre.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>