web-dev-qa-db-fra.com

ECMAScript 6 ou 7 prend-il en charge le typage statique?

ECMAScript 6 prend-il en charge le typage statique? Que diriez-vous de ECMAScript 7?

26
Mojtaba

Non.

Mais sur le script ECMA-Script Wikipage, il existe un paragraphe sur les modifications apportées à ECMA-Script 7:

La septième édition en est à un stade très précoce de développement, mais elle est destinée à poursuivre les thèmes de la réforme du langage, de l’isolation du code, du contrôle des effets et de la création d’une bibliothèque/d’un outil à partir de ES6. Les nouvelles fonctionnalités proposées incluent promesses/accès simultanés, améliorations numériques et mathématiques, protections et marques (une alternative au typage statique) , surcharge d’opérateurs, types de valeur (objets de type numéro de première classe), nouvelles structures d’enregistrement (enregistrements, tuples et tableaux typés), correspondance de modèle et traits.

Ce qui peut vous intéresser.

16
Daniel K. Mueller

Bien que cela ne fasse pas partie de la spécification ES6, Closure Compiler applique les annotations de type d'argument JSDoc dans le code JavaScript lors de l'utilisation de son niveau de compilation Avancé. Les annotations de type sont spécifiées à l'aide de commentaires, elles sont donc ignorées dans le développement, mais lorsque vous créez votre application pour une version de production, une incompatibilité de type entraîne un avertissement du compilateur ou, éventuellement, une erreur du compilateur.

Un exemple d'annotation de type JSDoc appliquée:

/**
 * @param {string} stringValue
 * @return {number}
 */
function toInt(stringValue) {
  return parseInt(stringValue, 10);
}

var val = toInt("10"); // Good
var val = toInt(false); // NaN in development, but throws an error (optional) 
                        // or prints a warning (default) at build time

En prime, JSDoc peut créer une documentation sur l'API en utilisant la même syntaxe. Il est donc également utile de documenter votre code.

Mais un avertissement: pour que Closure Compiler réalise sa magie d'optimisation avancée, chaque ingénieur de votre projet doit respecter certaines conventions de codage strictes. Le compilateur ne peut pas imposer de types à moins de savoir de manière fiable ce que fait votre code, ce qui signifie abandonner une partie de la syntaxe dynamique et superficielle de JavaScript. Si vous ne les suivez pas, des erreurs peuvent se glisser dans votre application et elles peuvent être très difficiles à diagnostiquer par la suite. Les infrastructures et bibliothèques JavaScript les plus courantes ne les suivent pas, bien que vous puissiez parfois contourner ce problème à l'aide de la fonctionnalité externs du compilateur. (jQuery est pris en charge à l'aide d'externes, par exemple.)

Donc, si vous l'utilisez, assurez-vous de tester votre application à fond. Personnellement, je n’envisagerais même pas d’utiliser cette fonctionnalité sur une application Web à moins qu’elle dispose d’un bot de construction Jenkins et d’une couverture de test automatisée à près de 100% qui puisse être exécutée sur votre code après qu’elle ait été optimisée. C'est beaucoup de travail et ce n'est pas pour tout le monde; Il m'a fallu des mois pour que l'un de mes projets atteigne ce niveau. Mais personnellement, je pense que l'effort en vaut la peine.

Pour plus d'informations, consultez Advanced Compilation and Externs et Annotation de JavaScript pour le compilateur Closure .

5
Richard Connamacher

Non, la saisie statique n’est pas prise en charge dans ECMAScript 6 (ES2015).

En ce qui concerne ECMAScript 7 (ES2016), aucune étape 1, 2, 3, 4 ni étape 0 n'est proposée pour le typage statique.

J'ai vu quelques propositions/idées de typage statique apparaître sur la liste de diffusion es-discussion , mais aucune d'entre elles n'a été proposée pour ES7 (ES2016).

Si vous voulez maintenant taper statique, vous feriez probablement mieux de rechercher TypeScript ou Flow.

2
Thomas Foster

Bien que ce ne soit pas de l'ES6 pur, AtScript de Google qui étend l'ES6 avec des annotations de type et se compile en code ES6 valide une fois que le compilateur est rendu public: Primer AtScript

0
NagyI

En option, vous pouvez consulter le plugin EsLint https://github.com/yarax/typelint

Ce n'est pas une vérification statique, mais facultative. L'avantage de TypeLint est d'utiliser des données d'application déjà existantes pour créer et utiliser des types automatiquement, contrairement à TypeScript ou Flow, par exemple, où vous devez décrire des types complexes par vous-même.

0
Rax Wunter