Dois-je utiliser une machine à écrire? ou je peux simplement utiliser ES6? [fermé]


286

Mon travail quotidien est celui de développeur client utilisant AngularJS. Nous évaluons si nous voulons aller avec TypeScript. J'ai fait quelques recherches sur dactylographié et presque tous les packages JavaScript dont j'ai besoin doivent avoir des fichiers de type définition. J'ai trouvé que ce n'était pas très pratique, surtout si j'aimerais essayer quelque chose de nouveau et qu'ils n'ont pas de définition. C'est vraiment frustrant. (Même la définition actuelle de jQuery me pose quelques problèmes si je veux utiliser la version bêta de type 1.5). J'ai commencé à regarder ES6 et il ressemble à TypeScript. Dois-je simplement utiliser ES6 à la place? De plus, j'ai entendu que angular 2 aura un support complet pour TypeScript, est-ce une des raisons pour lesquelles je devrais rester avec?


11
Vous n'avez pas besoin d'un fichier de définition à chaque fois pour quelque chose de nouveau. Si vous souhaitez utiliser une bibliothèque sans type, vous pouvez l'écrire, declare var MyNewLibraryName: any;puis l'utiliser comme bon vous semble sans que le compilateur ne se plaint.
David Sherret

2
Avec les votes pour clore cette question, je suggérerais de demander plus des avantages / inconvénients associés à chaque approche plutôt que de demander quelle est la meilleure, de cette façon vous demandez des informations et non des opinions.
Brocco

typescript met à jour la fonctionnalité de nouvelle version de javascript avant tous les principaux navigateurs, mon option est d'utiliser dactylographié et de compiler en version javascript en fonction de vos navigateurs cibles. (bien sûr, même il est facile de transpiler javascript d'une version à l'autre)
bhv

Si vous ne vous souciez pas de pouvoir lint correctement votre code, et que vous voulez que Immutable.js soit vraiment difficile à travailler, et que vous aimez écrire du passe-partout, et que vous pensez que DRY est surfait et que vous préférez réellement vous répéter, et vous aimez écrire des définitions de type pour le code d'autres personnes, et vous aimez gérer les types tels qu'ils changent sous vous, et vous aimez basculer entre deux éditeurs de texte différents parce que rien ne fonctionne correctement, puis choisissez Typescript. Mais si vous êtes sain d'esprit, choisissez ES6 / 7 et Babel.
gargantuesque

Réponses:


114

J'utilise Typescript dans mon projet angulaire actuel depuis environ un an et demi et bien qu'il y ait quelques problèmes avec les définitions de temps en temps, le projet DefinitelyTyped fait un travail incroyable pour suivre les dernières versions des bibliothèques les plus populaires.

Cela dit, il existe une courbe d'apprentissage définie lors de la transition de JavaScript vanille à TS et vous devez prendre en compte la capacité de vous et de votre équipe à effectuer cette transition. De plus, si vous allez utiliser angulaire 1.x, la plupart des exemples que vous trouverez en ligne vous obligeront à les traduire de JS à TS et, dans l'ensemble, il n'y a pas beaucoup de ressources pour utiliser TS et angulaire 1.x ensemble en ce moment .

Si vous prévoyez d'utiliser angular 2, il existe de nombreux exemples d'utilisation de TS et je pense que l'équipe continuera à fournir la plupart de la documentation dans TS, mais vous n'avez certainement pas à utiliser TS pour utiliser angular 2.

ES6 a quelques fonctionnalités intéressantes et je prévois personnellement de me familiariser avec lui, mais je ne le considérerais pas comme un langage prêt pour la production à ce stade. Principalement en raison d'un manque de support des navigateurs actuels. Bien sûr, vous pouvez écrire votre code dans ES6 et utiliser un transpilateur pour le faire passer à ES5, ce qui semble être la chose la plus populaire à faire en ce moment.

Dans l'ensemble, je pense que la réponse se résumerait à ce que vous et votre équipe êtes à l'aise d'apprendre. Personnellement, je pense que TS et ES6 auront un bon support et un avenir long, je préfère TS cependant parce que vous avez tendance à obtenir les fonctionnalités du langage plus rapidement et en ce moment le support des outils (à mon avis) est un peu meilleur.


40
ES6 n'a pas de support de navigateur ?? Êtes-vous un politicien de la SP? Dactylographié et ES6 ont besoin d'un transpilateur. Signifie que vous n'exécutez pas TS ou ES6 sur le Web, mais utilisez plutôt quelque chose comme Babel. TS dans Angular 2 a été ajouté juste pour un lien politique entre Google et MS
STEEL

40
@STEEL Non, pas un politicien de la SEP, vous répondez simplement à une réponse que j'ai laissée il y a plus d'un an lorsque le support ES6 était très limité. Et vous êtes libre de penser que la décision TS et Angular 2 était politique mais cela ne change pas mon point de vue qu'elle a été écrite pour cette langue et l'équipe Angular2 encourage son utilisation.
Kent Cooper

18
Cela date d'il y a 2 ans, mais le temps a montré comment la norme finit par prévaloir. De nos jours, ES6 est largement pris en charge nativement par la plupart des navigateurs. Classes, fonctions fléchées, etc. Finalement, nous arriverons à un point où les navigateurs prendront nativement en charge une version suffisamment décente de javascript pour rendre les transpilers inutiles. Dactylographier aura toujours besoin d'un transpilateur. Pourquoi est-ce important? parce que c'est notre devoir en tant que développeurs web de faire avancer le web, et c'est en soutenant les standards
monzonj

3
C'est une déception ES6 ne prend pas en charge la sécurité de type "temps de compilation". Il y a beaucoup de bonnes choses dans ES6 mais le fait que je ne puisse pas dire "cet argument est une chaîne (ou une instance de classe X), bon sang" et pouvoir le faire vérifier dans le cadre de votre processus de construction est toujours mauvais pour grands programmes (front end et back end).
Brad Peabody

Vous pouvez utiliser un outil comme Flow Type pour ajouter une prise en charge de type à ES6 si vous le souhaitez vraiment. Jusqu'à ce que ES6 devienne omniprésent dans tous les navigateurs, votre chaîne d'outils sera alors composée de Flow-> ES6-> Babel qui est beaucoup d'indirection, mais fait le travail et je pense que c'est une chaîne très populaire actuellement.
Prahlad Yeri

660

Arbre de décision entre ES5, ES6 et TypeScript

Cela vous dérange d'avoir une étape de construction?

  • Oui - Utilisez ES5
  • Non - continuez

Voulez-vous utiliser des types?

  • Oui - Utilisez TypeScript
  • Non - Utilisez ES6

Plus de détails

ES5 est le JavaScript que vous connaissez et utilisez dans le navigateur aujourd'hui, c'est ce qu'il est et ne nécessite pas d'étape de construction pour le transformer en quelque chose qui fonctionnera dans les navigateurs d'aujourd'hui

ES6 (également appelé ES2015 ) est la prochaine itération de JavaScript, mais il ne fonctionne pas dans les navigateurs actuels. Il existe de nombreux transpilers qui exporteront ES5 pour les exécuter dans les navigateurs. C'est toujours un langage dynamique (lu: non typé).

TypeScript fournit un système de frappe en option tout en intégrant des fonctionnalités des futures versions de JavaScript (ES6 et ES7).

Remarque: de nombreux transpilers (par exemple babel, TypeScript) vous permettront d'utiliser des fonctionnalités des futures versions de JavaScript aujourd'hui et d'exporter du code qui fonctionnera toujours dans les navigateurs d'aujourd'hui.


5
Ce n'est pas aussi simple. Il y a beaucoup d'autres facteurs.
RaoulRubin

16
@RaoulRubin C'est vrai, il y a beaucoup d'autres facteurs, mais pour une question fermée ici, cela fournit au moins une base de départ pour le processus de prise de décision
Brocco

1
PS - ES6 + FlowType = Love :)
Red2678

3
@RavinderPayal a une question intéressante, Brocco. Du point de vue du marché, quelle est la valeur de TS vs es5 ou es6 et d'autres choses dans ce sens?
J.Wells

3
Ok, donc ce post a quelques années /. Avançons rapidement jusqu'au 28 septembre 2017. La plupart des navigateurs prennent-ils en charge ES6?
Dewey Banks
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.