La version finale de TypeScript 2.0 est disponible
Pour accompagner Angular 2
Le 23 septembre 2016 à 10h00
3 min
Logiciel
Logiciel
Microsoft a publié la version 2.0 de TypeScript, un surensemble de JavaScript. Plusieurs nouveautés importantes sont au programme, notamment les types « non-nullable », l’analyse du flux de contrôle ou encore la déclaration simplifiée des modules.
TypeScript est un langage conçu pour gérer de gros projets. Créé par Microsoft et open source (environ 150 contributeurs), il rencontre un certain succès, la récente arrivée d’Angular 2 – dont il accompagne presque la sortie – ne pouvant que le renforcer puisqu’il en devient le langage recommandé. Il s’agit d’un surensemble de JavaScript, dont il reprend l’ensemble des capacités et avec lequel il est totalement compatible.
Pour bien comprendre l’intérêt de TypeScript, il suffit de rappeler qu’il est transpilé de manière statique. Dans un tel cas, c’est le compilateur qui s’occupe de vérifier les erreurs lorsqu’il passe le code à la moulinette. Une différence de taille avec le JavaScript classique où les erreurs ne sont vérifiées qu’à l’exécution du code. Un gain que l'on retrouve avec d'autres langages tels que C++, C# ou Java.
Interdire les valeurs null et undefined
La principale nouveauté de TypeScript 2.0 est un contrôle plus important des valeurs null
pour les développeurs. Le type « non-nullable
» permet donc à ces derniers de déclarer des variables qui ne pourront jamais renvoyer une valeur null
ou undefined
.
Cette déclaration reste à l’appréciation du développeur. En ajoutant le flag « --strictNullChecks
» à son projet, il interdit explicitement à toutes les déclarations de variables qui suivent de renvoyer autre chose que leur type, string
ou number
par exemple. Mais si une variable doit justement pouvoir retourner des valeurs null
ou undefined
? De nouveaux types font justement leur apparition, avec les mêmes noms. Notez par ailleurs qu’un opérateur « ! » permet de supprimer ces types de toute expression.
Ces nouveautés à elles seules peuvent permettre une chute importante du nombre d’erreurs dans le code. D’autant que si chaque variable est soigneusement déclarée, le compilateur peut en conséquence détecter d’autres types d’erreurs, notamment les variables qui ne sont jamais initialisées.
Flux de contrôle et déclaration simplifiée des modules
Signalons deux autres apports important. D’une part, la possibilité de déclarer des modules de manière simplifiée. Plus besoin de préciser certaines informations, « declare module "foo";
» étant par exemple suffisant. D’autre part, la CFA (control flow analysis) qui permet de suivre à la trace l’évolution des types dans un programme.
Attention, son utilisation dans Visual Studio 2015 ou Visual Studio Code réclame la dernière mise à jour disponible de chaque environnement de développement.
La version finale de TypeScript 2.0 est disponible
-
Interdire les valeurs null et undefined
-
Flux de contrôle et déclaration simplifiée des modules
Commentaires (81)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 24/09/2016 à 12h18
Le 24/09/2016 à 12h25
Le 24/09/2016 à 13h00
Le 24/09/2016 à 13h14
Le 24/09/2016 à 14h17
Le 24/09/2016 à 15h34
Le 24/09/2016 à 15h45
Le 24/09/2016 à 16h22
Ouais JS c’est le bordel, après quelques années à devoir m’en farcir ci et là j’en suis venu à des choses simple
1/ Osef d’essayer de comprendre exactement la notion de prototype, de toute façon les concepteurs de Js ne savent eux même pas vraiment ce que ça c’est …
2/ Arrêter d’utiliser des notations chelou pour faire des classes autant utiliser le prototype (le machin fourre tout chelou)
3/ Surtout serrer les fesses parce que Js est implémenté de façon What’s The Fuck dans chaque navigateur
En gros pour faire de la Poo faire simple pour une classe Toto :
function Toto(machintruc1, bidule2) {
this.machin = machintruc1;
this.bidule = bidule2;
}
Toto.prototype.Affiche = function(ouinouin) {
alert(this.machin.value() + “_” + this.bidule.what() + “_” + ouinouin);
};
Le 24/09/2016 à 17h15
Le 24/09/2016 à 18h09
Le 24/09/2016 à 18h28
Le 24/09/2016 à 18h30
Le 24/09/2016 à 19h19
Le 24/09/2016 à 20h44
Le 26/09/2016 à 08h07
TS reste vraiment pratique, que ce soit pour de petits projets projets ou d’autres plus grands.
En terme de lisibilité du code y a pas photo, quand bien même on garde son code JS bien organisé et propre. Perso je m’y retrouve beaucoup plus facilement, et il est plus simple d’avoir un dev quasi proche de la POO avec Typescript qu’avec du JS pur (ou là on part sur du prototypage qui peut vite prendre la tête).
Sans compter que le code généré est particulièrement propre (pour une fois), qu’il nous fournit un typage (quoi que pas assez fort à mon goût), les signatures de fonctions, etc.
Depuis que je l’utilise j’ai vraiment du mal parfois à revenir sur du JS natif, qui reste quand même un gros foutoir ce qui s’explique par l’historique du langage M.ême si ça commence à aller mieux depuis ES6 et surtout ES7, mais tout n’est pas encore pris en charge par les navigateurs… ce que comble en partie TS.
Le 26/09/2016 à 11h27
Le 26/09/2016 à 16h16
Le 26/09/2016 à 16h39
Le 27/09/2016 à 03h44
Un article complet sur les problèmes de transpiration des développeurs…
Franchement, NI Team, vous nous aviez habitué à mieux …
" />
Le 27/09/2016 à 07h54
C’est vrai, ils n’ont même pas parlé les risques des sels d’aluminium dans les déodorants. Et quand on parle de transpiration, c’est important d’aborder ce sujet.
Le 28/09/2016 à 11h16
Tout ce qui est dériver vite fait des objets pour en adapter marginalement le comportement (ou faire des unions) se fait aisément en héritage classique , et même si c’est un peu plus verbeux, avec un IDE décent, ça se fait en quelques clics.
Là où il y a une vraie différence c’est si on commence à avoir des objets qui ont un comportement ‘non prévisible’ au runtime (par non prévisible, j’entends bien sûr, ‘il n’y a pas moyen d’imaginer ce comportement au moment du développement’, puisque sinon, avec les interfaces Java ou équivalent, ça se règle facilement), ou qui mutent dans tous les sens au runtime.
Seulement j’ai jamais rencontré une telle situation, ni même réussi à en imaginer une.
J’aime bien le javascript, mais je m’y perds moi-même très vite dans mes propres développements " />
Après je ne suis dev ni de métier ni de formation, ça n’aide certainement pas à avoir une bonne vision des avantages et inconvénients des différents modèles, ou a avoir les méthodes qui permettent d’utiliser les différents modèles proprement.
Le 29/09/2016 à 18h24
Le 23/09/2016 à 12h29
“Interdire les valeurs null et undefined”
Entre les try et les catch, 80% du code est basé sur ce principe, au risque que l’appli plante " />
Le 23/09/2016 à 12h34
Le 23/09/2016 à 12h38
[MaLife]
Moi au boulot je transpile du C++ en javascript avec emscripten " />
[/MaLife]
Le 23/09/2016 à 12h41
Etant donné que le C# a des capacités à être utilisé en script (encore plus depuis Roslyn), ça serait intéréssant que Microsoft fasse un geste (sur Edge par exemple) pour proposer C# en alternative à JS. Et ça ferait plaisir aux dev en ASP.NET, vu qu’ils pourront utiliser C# des 2 côtés.
Parce que bon je veux pas dire, mais parler de web ouvert quand tout est limité à un seul language, du moins sur le front-end (HTML, CSS, JS), bof hein " />
Le 23/09/2016 à 12h44
Le 23/09/2016 à 12h47
Le 23/09/2016 à 12h48
Avec ton raisonnement, il faudrait alors revenir aux 1000 prises électriques différentes, une par marque, pour avoir le choix.
Le 23/09/2016 à 12h56
Y’a pas de mal à avoir du choix. JS a beau être populaire, n’empêche que pour écrire du code qui fonctionne correctement, c’est une vraie galère, puisque justement le principe même du langage est qu’il n’y a pas de “cadre”, tout est possible. Peut-être que dans l’idée c’est une bonne chose, mais la réalité prouve que pas vraiment, autrement y’aurai pas des surplus du genre TypeScript, Dart et j’en passe.
Y’a la liberté dans le développement logiciel, je vois pas trop pourquoi on ne devrait pas en avoir dans le développement web.
Le 23/09/2016 à 12h56
C’est plus que la possibilité d’avoir un typage fort, car sans le support des types, il perd énormément de son intéret.
J’inverserai la phras: Il permet d’avoir un typage faible.
Le 23/09/2016 à 13h14
Le 23/09/2016 à 13h22
Le 23/09/2016 à 13h55
J’avais pensé à ce genre d’explication.
Le 23/09/2016 à 14h13
Le 23/09/2016 à 14h15
Non je vois pas, désolé " />
Le 23/09/2016 à 14h25
Le 23/09/2016 à 15h45
Le 23/09/2016 à 10h48
On est pas très éloigné de la réalité en fait " />
Le 23/09/2016 à 10h50
Oui, ya pas beaucoup de dévs transpilé selon cette définition " />
Le 23/09/2016 à 10h57
Le 23/09/2016 à 11h00
Il te manque un analyste… C’est pour ca.
Le 23/09/2016 à 11h00
Parfois le cahier des charges est pourri, parfois le dév fait son truc mais ne pose pas de questions “logiques”, parfois les commerciaux vendent des fonctionnalités inexistantes mais dans leur tête c’est une simple adaptation.
Bref les problèmes sont nombreux et très variés, mais chacun cherche toujours un autre sur qui il pourra rejeté la faute.
Le 23/09/2016 à 11h09
Le 23/09/2016 à 11h21
Tu peux notamment à langage constant définir vers quelle version de javascript tu souhaites transpiler ton typescript.
Quand ton navigateur cible n’est compatible qu’avec ecmascript 5, c’est un plus.
Le 23/09/2016 à 11h29
Oui mais ça c’est déjà possible de JS à JS donc TS n’apporte rien là dessus. Du coup c’est un peu léger comme motivation.
Le 23/09/2016 à 11h32
Le 23/09/2016 à 11h42
La différence avec quelque chose comme Unity c’est que ce langage est au cœur de l’environnement qu’il propose. Il ne s’agit pas d’une tentative de rafistolage. Je ne m’en voudrait pas de ne pas être au top en CPP sur Unity parce que avec C# on sera toujours dans cet environnement cohérent.
Avec TS c’est juste un truc en plus, comme Dart, comme coffee script et surement d’autres qui fout le bordel parce que du coup personne n’utilise la même chose. Du coup un développeur va peut être être plus productif ponctuellement dans son propre cadre de travail, mais ça a un côté égoïste parce qu’il devient plus complexe de partager les avancées. Au final je trouve que ça s’éparpille et que ça rend le paysage encore plus bordélique qu’il ne l’était déjà. Quand tu vois que les gros projets s’amusent à maintenir des versions TS plus pure JS et que parfois il peut y avoir des petites diff d’un dépôt à l’autre ou que tu te retrouves avec des docs pas à jour selon le langage que tu choisis pour les exemples… bref j’aime l’idée, mais dans les faits j’ai du mal à trouver ça cool.
Le 23/09/2016 à 11h42
Personnellement j’ai cru lire TrueCrypt 2.0.
" />
Le 23/09/2016 à 11h56
Le 23/09/2016 à 11h57
C’est vrai. Si c’était unifié, du genre sous python ou actionscript, et que les plus grandes entreprises ET projets open source l’utilisent, on aurait enfin un remplaçant d’ecmascript.
Le 23/09/2016 à 11h57
Dans les commentaires, il y a des gens qui s’en servent… J’ai pas l’impression vu ce que je lis. L’avantage de Typescript c’est que cela en fait un vraiment langage objet avec possible d’avoir un typage fort là où le javascript est un langage protoypé (que presque personne ne maîtrise) à typage faible. Ça permet de faire de grosse application JS sans trop se prendre la tête, surtout quand on vient de l’objet. Après, on perd pas mal de ce qui fait la force de JS, comme le protypage (que je ne m’amuserait pas à expliquer ici).
Ça reste une actu pour les dévs web, pas forcement accessible pour ceux qui n’ent font pas.
Le 23/09/2016 à 12h08
Le 23/09/2016 à 12h17
Si tu rajoutes un transpileur comme Babel effectivement.
Le 23/09/2016 à 16h08
Merci je connais, ça c’est la plomberie. In fine le prototypage va être utilisé pour mettre en places les paradigmes de la programmation orientée objet. Donc des “class” qui sont certes des fonctions mais qui sont nommées par convention en upper camel case, de l’héritage de toutes formes, une instance de cette pseudo classe, qui peut avoir un type avec les mécanismes….
Bref, c’est puissant, mais peu structurant. Typescript vient structurer tout cela.
Le modèle que tu dupliques, c’est une manière de faire. Tu peux aussi le faire par prototype qui ne possède pas l’inconvénient de la duplication.
Le 23/09/2016 à 16h22
Le 23/09/2016 à 16h54
Renseigne toi sur WebAssembly qui devrait arriver dans les années qui viennent …
Twitter Twitter
Le 23/09/2016 à 17h14
Cette techno est plus que prometteuse :)
Le 23/09/2016 à 17h21
Le 23/09/2016 à 17h36
Je ne me méfie pas plus. Mais si c’est pas fiable l’intérêt de TS est tout de même amoindri, non? C’est juste que je vois ça comme une charge de boulot supplémentaire alors qu’en JS je n’ai pas à me poser la question.
Le 23/09/2016 à 17h41
Oui effectivement je pense que tu as raison là dessus et que ce dont je parle n’arrivera probablement jamais. Et en fait je pense qu’à l’avenir c’est effectivement ES qui se rapprochera de ce que peut proposer TS.
Du coup j’imagine dans quelques années qu’il pourrait y avoir tout un tas de code TS qui traînera partout alors qu’il n’aura plus lieu d’être.
Le 23/09/2016 à 18h06
Quelqu’un aura-t-il un jour le courage de tuer Javascript.
Non parce que, à la base, le problème c’est quand même de coder directement en Javascript.
Le 23/09/2016 à 21h54
Le 23/09/2016 à 22h12
Le 24/09/2016 à 07h21
Le 24/09/2016 à 08h15
(désolé pour le doublon)
Je n’ai pas dit que le prototype était l’inverse de la duplication. Je répondais à ton propos qui est réducteur et trop (trop) simpliste:
“Pour faire (très très) simpliste: on ne définit plus des types qu’on
instancie. On définit des espèces de modèles qu’on duplique. “.
Wikipedia a une definition juste:
Cloning refers to a process whereby a new object is constructed by copying the behavior of an existing object (its prototype).
Je connais l’orienté prototype merci… Mon propos est plus haut niveau. Le prototype c’est la plomberie qui va permettre de mettre en place certains principes de l’orienté object notamment l’héritage… Que ce soit en utilisant un principe de class ou de prototype, le besoin derrière su cet aspect est le même. Bref, c’est puissant, mais peu structurant. Typescript vient structurer tout cela.
Je rappel mon propos initial:
“En javascript les différentes facons de créer une simili class avec
héritage et tout le toutim montre sa puissance mais aussi sa faiblesse.”. Tu peux ticker sur simili class. Ce besoin primaire de disposer d’un mécanisme de class et d’héritage a d’ailleurs été introduit avec ES6, cela reste du sucre syntaxique mais le mot est présent…
Le 24/09/2016 à 09h49
Le 24/09/2016 à 10h02
Le 24/09/2016 à 12h14
Le 24/09/2016 à 12h16
Le 23/09/2016 à 10h14
“transpilé” vraiment ? ça veut dire quoi en fait ?
Quant à un compilateur qui peut détecter les variables non initialisées, quelle nouveauté !
Le 23/09/2016 à 10h16
Le 23/09/2016 à 10h19
Je voulais surtout critiquer ce nouveau mot et son utilisation sans recul dans l’article.
Parce que une phrase comme celle-là :
“Pour bien comprendre l’intérêt de TypeScript, il suffit de rappeler qu’il est transpilé de manière statique”,
ça ne m’aide pas à comprendre, vraiment pas !
Le 23/09/2016 à 10h25
Tout à fait d’accord : ce néologisme est un sous-ensemble de “compiler” en ne faisant qu’ajouter des conditions sur l’objet de destination.
Aussi inutile & contre-productif que d’inventer “fruitiger” à la place de “manger” lorsque l’on parle d’un fruit. On peut aller très loin en déclinaisons.
Et ce n’est même pas pour paraître moderne vu que ce mot ne semble pas nouveau (je suis remonté jusqu’à juin 2012 pour le moment). Est-ce donc pour paraître expert ?
TypeScript compile en JavaScript car on passe d’un langage à un autre. Point.
Le 23/09/2016 à 10h25
Le 23/09/2016 à 10h30
De ton point de vue.
Transpiler apporte l’information nécessaire à l’opération effectuée la où compiler serait trop générique.
Le 23/09/2016 à 10h34
C’est pas particulièrement nouveau, c’est juste qu’on le voit plus souvent avec tout ce qui est TS, Dart, Babel, etc, mais ça vait déjà quelques années que tu peux trouver ce terme (Je me souvient avoir utilisé ce terme à l’époque où je bossais sur GWT il y a bien 4 ans déjà). Il s’agit simplement de passer d’un code source à un autre.
Après j’avoue que le paragraphe dans l’article est pas clair.
“de manière statique”, c’est à dire? Pas à la volée dans le navigateur? Effectivement tout est transpilé en JS avant d’envoyer en prod (enfin même pour tester de toute façons).
Et pourquoi parler de compilateur quand on parle de transpiler? Un transpileur transpile et un compilateur compile (à la limite transcompilateur mais c’est moche)
Le 23/09/2016 à 10h35
Le 23/09/2016 à 10h37
C’est un mot assez utilisé dans la sphère javascript où quelques langages propose ce mécanisme de transpilation. C’est un mot anglais repris en français.
Le 23/09/2016 à 10h38
Pour bien comprendre l’intérêt de TypeScript, il suffit de rappeler qu’il est transpilé de manière statique.
Ah mais c’est bien sûr ! C’est tellement évident !
" />
Tout le monde s’extasie devant ça, mais je ne comprends pas vraiment à quoi ça sert, surtout quelle est la valeur ajoutée dans un “sur-ensemble” par rapport à du JS natif..
Edit : je vois que je ne suis pas le seul à tiquer sur cette “explication” " />
Le 23/09/2016 à 10h44
Encore un outil pour mâcher le travail des dévs…alors qu’ils passent leur journée à faire des simples copier/coller et se plaignent du marketing ou du commercial alors qu’ils ne sont pas fichus de sortir une appli sans bugs. " />