ES6 est entièrement disponible dans Node 4. Je me demandais s'il inclut un concept d'interface pour définir les contrats de méthode comme dans MyClass implements MyInterface
.
Je ne trouve pas grand-chose avec ma recherche sur Google, mais il existe peut-être une belle astuce ou une solution de contournement disponible.
javascript
node.js
interface
ecmascript-6
Jérôme Verstrynge
la source
la source
Réponses:
Les interfaces ne font pas partie de l'ES6 mais les classes le sont.
Si vous en avez vraiment besoin, vous devriez regarder TypeScript qui les prend en charge .
la source
Dans les commentaires, debiasej a écrit l'article mentionné ci-dessous pour en savoir plus sur les modèles de conception (basés sur les interfaces, les classes):
http://loredanacirstea.github.io/es6-design-patterns/
Un livre de modèles de conception en javascript peut également vous être utile:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Design pattern = classes + interface ou héritage multiple
Un exemple du modèle d'usine dans ES6 JS (pour exécuter: node example.js):
la source
Étant donné que l'ECMA est un langage «sans classe», la mise en œuvre de la composition classique n'a pas - à mes yeux - beaucoup de sens. Le danger est que, ce faisant, vous tentez effectivement de réorganiser le langage (et, si vous en êtes convaincu, il existe d'excellentes solutions holistiques telles que le TypeScript susmentionné qui atténuent la réinvention de la roue)
Cela ne veut pas dire que la composition est cependant hors de question dans Plain Old JS. J'ai longuement recherché cela il y a quelque temps. Le candidat le plus fort que j'ai vu pour gérer la composition dans le paradigme du prototypage d'objet est stampit , que j'utilise maintenant dans un large éventail de projets. Et, surtout, il adhère à une spécification bien articulée.
plus d'informations sur les timbres ici
la source
class
est juste un synonyme destruct
. Un langage vraiment classique comme Smalltalk? Il permet une extension dynamique des prototypes et même des instancesCeci est ma solution au problème. Vous pouvez «implémenter» plusieurs interfaces en remplaçant une interface par une autre.
ÉDITER:
J'ai amélioré le code afin que vous puissiez maintenant simplement utiliser implément (baseClass, interface1, interface2, ...) dans l'extension.
la source
il existe des packages qui peuvent simuler des interfaces.
vous pouvez utiliser l' interface es6
la source