La bêta de TypeScript 2.0 disponible et déjà supportée par WebStorm 2016.2
Stop aux valeurs null
Le 12 juillet 2016 à 10h00
4 min
Logiciel
Logiciel
Microsoft vient de publier la première bêta de TypeScript 2.0, un surensemble de JavaScript conçu pour la gestion des gros projets. L’environnement WebStorm passe en version 2016.2, intégrant dans la foulée les nouveautés du langage de script.
TypeScript est un langage de Microsoft qui fonctionne comme un superset de JavaScript, avec lequel il est totalement compatible. Conçu pour gérer de gros projets, il se démarque notamment par un typage fort, un point que l’éditeur a décidé de renforcer avec la version 2.0, actuellement en développement.
La première bêta introduit donc les « non-nullable types ». Comme leur nom l’indique, il s’agit de types de variables qui ne pourront en aucun cas retourner de valeur « null » ou « undefined ». Dans le cas d’une fonction dont le rôle était de récupérer une séquence de caractères (string), il n’existait aucun moyen de savoir si la variable n’allait pas à un moment donné renvoyer une valeur « null ».
Interdire les valeurs null et undefined pour les types
Dans TypeScript 2.0, un développeur peut donc ajouter le flag « --strictNullChecks ». Si une déclaration de variable se fait avec un type string ou number, elle ne pourra donc renvoyer que des séquences de caractères ou des nombres. Dans le cas d’une variable qui doit renvoyer des valeurs null et undefined, des types adaptés sont maintenant disponibles, avec les mêmes noms. L’opérateur « ! » permet également de retirer les deux types de toute expression.
Cet apport est complété par un autre, la CFA (control flow analysis). L’analyse du flux permet à TypeScript de suivre l’évolution des types dans un programme quelconque pour mieux comprendre ce qu’ils sont censés être à un certain point.
TypeScript 2.0 permet également de déclarer des modules de manière simplifiée. Il fallait auparavant renseigner la déclaration avec un minimum d’informations, mais ce n’est plus le cas. Par exemple, « declare module "foo"; » est suffisant, Microsoft indiquant que le développeur peut simplement vouloir indiquer que le module existe, sans se soucier de ce qu’il est.
Async et await devront attendre TypeScript 2.1
La nouvelle version ne sera par contre pas celle d’une fonction attendue : le support des fonctions async d’ES3 et 5. L’éditeur précise que l’implémentation d’async et await réclame une révision de certaines bases et qu’il n’est pas possible d’insérer l’ensemble des tests nécessaires dans le calendrier de la mouture 2.0. Les développeurs peuvent par contre l’espérer pour TypeScript 2.1, la pull request pouvant déjà être examinée dans le dépôt GitHub. Comme on peut le voir dans les commentaires de l’annonce, ils affichent toutefois une certaine déception sur ce report.
TypeScript devrait normalement sortir sous forme de Release Candidate d’ici quelques semaines, le temps que la phase bêta fasse son œuvre. La version finale, quant à elle, arrivera peu de temps après.
Attention, l'utilisation de cette bêta réclame la présence de l'Update 3 de Visual Studio 2015.
WebStorm intègre TypeScript 2.0 dans sa version 2016.2
L’environnement de développement intégré WebStorms, édité par JetBrains, rebondit dans la foulée en prenant en charge les nouveautés de TypeScript 2.0. Logique diront certains, cet IDE étant spécialisé dans les langages du web, et tout particulièrement JavaScript. Les utilisateurs pourront donc utiliser par exemple les nouveaux « non-nullable types ».
WebStorms 2016.2 intègre également la CLI (command line interface) d’Angular, permettant aux développeurs de créer de nouveaux projets Angular 2, une galerie de « Live templates » étant d’ailleurs disponible. Le support de React est également amélioré, avec par exemple une complétion du code pour les propriétés de composants définies avec « propTypes » ou des attributs non-DOM qui ne sont plus marqués comme non-résolus.
Notons également le support des imports jspm et des polices avec ligatures, une simplification de la gestion des patchs avec VCS, la possibilité d’ajouter une image en fond, le glissement d’éléments dans un fichier HTML pour générer automatiquement des tags adaptés, l’importation automatique des composants nécessaires en cas d’utilisation de TypeScript ou encore un meilleur support du langage Dart.
La bêta de TypeScript 2.0 disponible et déjà supportée par WebStorm 2016.2
-
Interdire les valeurs null et undefined pour les types
-
Async et await devront attendre TypeScript 2.1
-
WebStorm intègre TypeScript 2.0 dans sa version 2016.2
Commentaires (46)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 12/07/2016 à 11h47
Le 12/07/2016 à 11h53
Le 12/07/2016 à 11h59
Async et await devront attendre TypeScript 2.1
Je trouve ça tellement nul.
La grande valeur ajoutée des async/await se joue essentiellement coté serveur (cote client ça va surtout donner des mauvaise pratique) or, il est deja possible de faire du vrai l’async/await sur node en activant le flag ES6 de tsc…
Du coup les mecs vont juste perdre énormément de temps à bosser sur un polyfill qui avait certe, énormément de sens lorsque la demande a été lancée, mais plus aujourd’hui.
Le 12/07/2016 à 12h00
Il se passe quoi si on essaye d’affecter null à une variable non-nullable ?
Le 12/07/2016 à 12h19
Comme éditeur léger, il y a Visual Studio Code (pour Windows, unix…) :https://code.visualstudio.com/
Le 12/07/2016 à 12h30
Compatible avec SublimeText ?
Le 12/07/2016 à 12h51
Heu j’ai un peu de mal à piger ton point de vue. Async / Await ça a au contraire plus de sens sur le client que sur le serveur, piske ça sert justement à attendre que le serveur réponde sans devoir créer une fonction de callback :
x = AsyncGetResource1 ();
y = AsyncMakeQuery2 ();
MyElement.InnerText = await x + await y;
Le 12/07/2016 à 14h12
Je me suis mis a typescript / angular 2 depuis 1 semaine. J’aime beaucoup mais je galère à trouver des tutos intéressant :( Si qq à de bons liens, je suis preneur :)
Le 12/07/2016 à 14h26
il n’existait aucun moyen de savoir si la variable n’allait pas à un moment donné renvoyer une valeur « null ».
Non: il existait des moyens (et plusieurs, du côté de la fonction elle-même comme du côté de l’appelant) ; ce que typescript ajoute ici est un moyen plus ‘coder friendly’ de le faire.
La nuance est de taille à mes yeux.
Le 12/07/2016 à 14h44
Async Await est valable autant pour le client que le serveur.
Je pense surtout dans un cas d’utilisation avec Node JS côté serveur ou 90% des fonctions se font avec du callback.
Le 12/07/2016 à 14h59
J’suis pas trop convaincu que les callbacks NodeJS soient adaptés à une utilisation avec async/await, justement…
Je n’utilise pas beaucoup Node.JS (hou le doux euphémisme), mais quand je déclare un callback, c’est souvent un pattern :
“crée un serveur http, et chaque fois qu’un client demande la ressouce /f.html/, appelle la fonction f()”.
C’est cette notion de “chaque fois que” qui ne me semble pas compatible avec await/async, qui est plutôt “attends une seule fois qu’une action produise son effet, puis continue au statement suivant”.
Le 12/07/2016 à 15h14
Et si ta fonction f() mets 10 minutes à compléter et donc “retourner” (" />) tu fais comment ?
Le 12/07/2016 à 15h25
Le 12/07/2016 à 15h33
Le 12/07/2016 à 15h40
Le 12/07/2016 à 16h14
Ha oui, on est bien d’accord que faire de l’aynchrone c’est pratique partout. Je dis juste que le “syntactic sugar” apporté par la notation async/await ne permet pas de simplifier le code d’un serveur autant qu’il permet de simplifier le code d’un client, c’est tout…
Le 12/07/2016 à 11h04
TypeScript est très chouette, l’essayer c’est l’adopter !
Le 12/07/2016 à 11h22
C’est vrai que comparé à du JS classique ca change la vie. J’ai juste regretté la galère des typings à se cogner manuellement quand on utilise une librairie un peu exotique qui n’en as pas de dispo.
Le 12/07/2016 à 11h33
Je commence à apprendre un peu TypeScript (pour Angular 2). Des gens connaissent de bons tuto ? Y a quoi comme bon éditeur pour le TypeScript ? C’est aussi puissant qu’un Eclipse pour du Java (renommage des variables, des champs, des classes etc…) ou comme c’est du javascript faiblement typé faut tout se taper à la main ?
Le 12/07/2016 à 11h38
Visual studio 2015 (community gratuit) ou webstorm (300€) sont à mon sens les plus adaptés
Le 12/07/2016 à 11h45
OK, bon pas de chance VSC me demande 8Go d’espace disque, ça devra attendre que je fasse de la place.
VCS permet de faire de la grosse maintenance de code (renommage, split de classes, …) ?
Le 12/07/2016 à 16h15
Le 12/07/2016 à 16h16
Le 12/07/2016 à 16h23
Le 12/07/2016 à 16h44
Le 12/07/2016 à 16h53
Le 12/07/2016 à 17h29
Le 12/07/2016 à 18h33
Le 12/07/2016 à 20h37
Le 12/07/2016 à 21h15
Pas mieux, ça va faire 3 ans que j’en fais, niveau productivité c’est du bonheur…
Le 12/07/2016 à 21h44
Le site officielhttp://angular.io est la source la plus fiable (mais pas la plus complète, hélas) puisque la plus à jour (par rapport aux releases). C’est pas trop mal pour commencer, après il faut creuser sur google (toujours en faisant attention à la version utilisée) pour certains points plus précis.
Le 13/07/2016 à 05h56
Le 13/07/2016 à 09h40
Je crois que tu m’a pas compris.
Dans l’univers du “tout javascript”, lorsqu’on veut faire une “ application-industriel-pas-à-la-mode-wesh” qui ne passe pas un serveur web centralisé: on n’utilise pas de navigateur, car ça expose inutilement les sources à l’utilisateur, c’est une surcouche supplémentaire inutile sur laquelle on a pas forcement la main pour les mis à jour, et accessoirement ça fait pas pro du tout de balancer de fichier html/js en vrac dans un bete repertoire, en plus de t’empecher d’avoir acces à pas mal de fonctions bien interessante dont dispose la quasi totalité des autres techno de client lourds (l’acces au systeme de fichier pour ne citer que lui).
Le seul avantage de passer par un navigateur c’est juste la taille de l’executable qui prend +40MB supplémentaire dans sa version node (car il embarque un navigateur pour l’UI), mais vu qu’on parle de client lourd dont l’install ne depend pas d’un serveur web distant => osef.
Le 13/07/2016 à 10h49
Ah de fait, j’ai rien compris à ce que tu dis, en effet… Une application industrielle en tout JavaScript tournant sur un serveur Node/JS (dont j’ai appris récemment qu’il était monothread) juste pour “passer pour un pro” ? " />
Moi je te parle juste d’un tableau de bord qui collecte les indicateurs de performance du système depuis les différents équipements, calcule les corrélations, qu’on peut afficher sur n’importe quel PC, tablette, téléphone ou écran au mur..
Je ne vois vraiment pas l’intérêt concret de faire ça autrement que directement en JS dans une page html unique, servie statiquement par l’intranet du site.
Le coeur de métier est évidemment en C / C++ / Delphi dans des serveurs d’applications dignes de ce nom et sécurisés. En multithread. Avec des attentes de réponse synchrones et sans callbacks…
Le 13/07/2016 à 11h23
Le 13/07/2016 à 11h27
Le 13/07/2016 à 13h33
Le 13/07/2016 à 13h51
En effet je croyais qu’il l’avait coller au même prix que tout leur autres ide
Le 13/07/2016 à 13h55
Angular 2, c’est orienté composant. Niveau maintenance, c’est assez aisé si tu mets pas tous tes composants dans les mêmes fichiers.
Après le problème c’est pour trouver un bon IDE qui supporte le TS sur toutes les plateformes :-)
Le 13/07/2016 à 14h09
Le 13/07/2016 à 20h48
Le 13/07/2016 à 21h06
La version longue:
Cas typique: je fais une requête HTTP ; le traitement de la requête en lui-même est très peu consommateur en ressources (temps CPU), mais entre le moment où je fais la requête et le moment où j’aurai la réponse il peut très bien se passer 10 secondes pendant lesquelles je peux faire autre chose et/ou je dois rester réactif pour traiter d’autres demandes.
Autre exemple typique: les IHM (n’importe quelle appli graphique avec des boutons) dont le fonctionnement repose strictement sur ce même principe de boucle d’événements.
Il existe en nodeJS aussi de nombreuses solutions pour faire du multi-thread/multi-process avec communication inter-thread/process.
En bref, tout ça n’a rien d’extraordinairement nouveau, ce sont des concepts généraux qui existent depuis plus de 20 ans (et qu’au passage le moindre dev. du XXIème siècle qui se respecte un tant soit peu devrait maîtriser) ; nodeJS n’a pas plus réinventé la roue dans ce domaine qu’il ne serait composé que d’une seule roue carrée. NodeJS ne se différencie pas là dedans.
Faut arrêter avec les FUDs à deux balles du genre ‘nanmé node est mono-thread caydlamayrde’.
Le 14/07/2016 à 07h19
Le 14/07/2016 à 10h04
De l’asynchrone, j’en fais depuis 30 ans et le Z-80 des contrôleurs de l’époque (le multithread n’était pas trop répandu sur cette plateforme, mais il y avait des interruptions), donc c’est pas moi qu’il faut essayer de convaincre… Néanmoins, et pour nuancer mon propos, puisque manifestement il fait penser que je n’ai rien compris…
Le fonctionnement asynchrone est - comme tu le fais remarquer - utile quand on attend passivement qu’un processus extérieur fasse un traitement. Ce comportement est typiquement celui d’un client. Il arrive qu’on désire écrire un processus serveur qui agrège les résultats de plusieurs autres serveurs. Ce serveur prend donc, durant cette attente des résultats, lui-même une attitude de client. Un paradigme asynchrone est adapté à cela.
Par contre, là où le bât blesse, c’est que dès que tu as un workflow un peu complexe où tu alternes attentes passives et traitements lourds pouvant en plus être parallélisés, il devient vite compliqué de gérer ça, et tu as besoin de points de rendez-vous qui ne sont pas aisés à exprimer avec de “simples” fonctions de callback et qui, selon mon expérience, sont plus faciles à écrire et donc moins fragiles quand tu exprimes ce que tu attends directement dans un thread (j’ai pas dit que c’était impossible en asynchrone, je dis juste qu’il est beaucoup plus facile de perdre le fil du workflow - et la lisibilité du code dans ce contexte est cruciale).
Notamment un truc comme notre implémentation du protocole ASTM-1381 qui prend 8 pages quand c’est exprimé en asynchrone avec une machine à états (sans même gérer tous les cas), a pu se réécrire via un thread comme (de mémoire) :
while (retrycount < 6) {
send block
switch (read character) {
case ACK : return true;
case NAK : retrycount ++; break;
case EOT : *interrupt = true; return true;
case TIMEOUT : return false;
default : flushInput(); retrcount++; break;
}
}
Ce morceau-là se prêterait encore assez bien à un await AsynchSendBlock() et await AsynchReadChar() mais si c’est juste pour faire immédiatement un await d’un asych, autant faire directement un thread…
Le 14/07/2016 à 11h13
Le 14/07/2016 à 18h56