ES6 está totalmente disponível no Nó 4. Eu queria saber se ele inclui um conceito de interface para definir contratos de método como em MyClass implements MyInterface
.
Não consigo encontrar muito com meu Google, mas talvez haja um bom truque ou solução alternativa disponível.
javascript
node.js
interface
ecmascript-6
Jérôme Verstrynge
fonte
fonte
Respostas:
As interfaces não fazem parte do ES6, mas as classes sim.
Se você realmente precisa deles, deve olhar o TypeScript que os suporta .
fonte
Nos comentários, debiasej escreveu o artigo abaixo mencionado que explica mais sobre os padrões de design (com base em interfaces, classes):
http://loredanacirstea.github.io/es6-design-patterns/
O livro de padrões de design em javascript também pode ser útil para você:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Padrão de design = classes + interface ou herança múltipla
Um exemplo do padrão de fábrica em ES6 JS (para executar: node example.js):
fonte
Dado que ECMA é uma linguagem 'livre de classes', implementar a composição clássica não faz muito sentido - a meu ver. O perigo é que, ao fazê-lo, você está efetivamente tentando reengenharia da linguagem (e, se alguém tiver essa convicção, existem excelentes soluções holísticas, como o TypeScript mencionado anteriormente, que atenua a reinvenção da roda)
Agora, isso não quer dizer que a composição esteja fora de questão, no entanto, em Plain Old JS. Pesquisei longamente sobre isso há algum tempo. O candidato mais forte que vi para lidar com a composição dentro do paradigma prototípico do objeto é stampit , que agora uso em uma ampla gama de projetos. E, mais importante, segue uma especificação bem articulada.
mais informações sobre selos aqui
fonte
class
é apenas um sinônimo parastruct
. Uma linguagem verdadeiramente clássica como Smalltalk? Ele permite a extensão dinâmica de protótipos e até mesmo instânciasEsta é a minha solução para o problema. Você pode 'implementar' várias interfaces substituindo uma interface por outra.
EDITAR:
Eu melhorei o código para que agora você possa simplesmente usar implementar (baseClass, interface1, interface2, ...) na extensão.
fonte
existem pacotes que podem simular interfaces.
você pode usar a interface es6
fonte