ES6 jest w pełni dostępne w Node 4. Zastanawiałem się, czy zawiera koncepcję interfejsu do definiowania kontraktów metod, jak w MyClass implements MyInterface
.
Nie mogę znaleźć zbyt wiele w Google, ale może jest dostępna fajna sztuczka lub obejście.
javascript
node.js
interface
ecmascript-6
Jérôme Verstrynge
źródło
źródło
Odpowiedzi:
Interfejsy nie są częścią ES6, ale klasy są.
Jeśli naprawdę ich potrzebujesz, powinieneś spojrzeć na TypeScript, który je obsługuje .
źródło
W komentarzach debiasej napisał wspomniany poniżej artykuł, który wyjaśnia więcej na temat wzorców projektowych (opartych na interfejsach, klasach):
http://loredanacirstea.github.io/es6-design-patterns/
Książka wzorców projektowych w javascript może Ci się również przydać:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Wzorzec projektowy = klasy + interfejs lub dziedziczenie wielokrotne
Przykład wzorca fabrycznego w ES6 JS (do uruchomienia: node example.js):
źródło
Biorąc pod uwagę, że ECMA jest językiem „bezklasowym”, wdrażanie klasycznej kompozycji nie ma - moim zdaniem - sensu. Niebezpieczeństwo polega na tym, że robiąc to, skutecznie próbujesz przeprojektować język (i, jeśli ktoś jest tego mocno przekonany, istnieją doskonałe holistyczne rozwiązania, takie jak wspomniany wcześniej TypeScript, które łagodzą ponowne wymyślanie koła)
Nie oznacza to jednak, że kompozycja nie wchodzi w rachubę w Plain Old JS. Długo to badałem jakiś czas temu. Najsilniejszym kandydatem, jakiego widziałem do radzenia sobie z kompozycją w ramach prototypowego paradygmatu obiektu, jest stampit , którego obecnie używam w wielu różnych projektach. I, co ważne, jest zgodny z dobrze sformułowaną specyfikacją.
więcej informacji o znaczkach tutaj
źródło
class
jest tylko synonimemstruct
. Naprawdę klasyczny język, taki jak Smalltalk? To pozwala na dynamiczne rozszerzenie prototypów i nawet przypadkachTo jest moje rozwiązanie problemu. Możesz „zaimplementować” wiele interfejsów, zastępując jeden interfejs innym.
EDYTOWAĆ:
Poprawiłem kod, dzięki czemu możesz teraz po prostu użyć implement (baseClass, interface1, interface2, ...) w rozszerzeniu.
źródło
istnieją pakiety, które mogą symulować interfejsy.
możesz użyć interfejsu es6
źródło