ES6 está completamente disponible en el Nodo 4. Me preguntaba si incluye un concepto de interfaz para definir contratos de método como en MyClass implements MyInterface
.
No puedo encontrar mucho con mi búsqueda en Google, pero tal vez haya un buen truco o una solución alternativa disponible.
javascript
node.js
interface
ecmascript-6
Jérôme Verstrynge
fuente
fuente
Respuestas:
Las interfaces no forman parte del ES6, pero las clases sí lo son.
Si realmente los necesita, debería mirar TypeScript que los admite .
fuente
En los comentarios, debiasej escribió el artículo mencionado a continuación que explica más sobre los patrones de diseño (basados en interfaces, clases):
http://loredanacirstea.github.io/es6-design-patterns/
El libro de patrones de diseño en javascript también puede serle útil:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Patrón de diseño = clases + interfaz o herencia múltiple
Un ejemplo del patrón de fábrica en ES6 JS (para ejecutar: node example.js):
fuente
Dado que ECMA es un lenguaje "sin clases", implementar la composición clásica no tiene, en mi opinión, mucho sentido. El peligro es que, al hacerlo, está intentando efectivamente rediseñar el lenguaje (y, si uno se siente bien al respecto, existen excelentes soluciones holísticas como el TypeScript antes mencionado que mitigan la reinvención de la rueda)
Sin embargo, eso no quiere decir que la composición esté fuera de discusión en Plain Old JS. Investigué esto en profundidad hace algún tiempo. El candidato más fuerte que he visto para manejar la composición dentro del paradigma del prototipo de objeto es Stampit , que ahora uso en una amplia gama de proyectos. Y, lo que es más importante, se adhiere a una especificación bien articulada.
más información sobre sellos aquí
fuente
class
es solo un sinónimo destruct
. ¿Un lenguaje verdaderamente clásico como Smalltalk? Se permite la extensión dinámica de prototipos y casos inclusoEsta es mi solución al problema. Puede 'implementar' múltiples interfaces anulando una interfaz con otra.
EDITAR:
Mejoré el código para que ahora pueda simplemente usar implement (baseClass, interface1, interface2, ...) en el archivo extend.
fuente
hay paquetes que pueden simular interfaces.
puedes usar la interfaz es6
fuente