ES6 полностью доступен в Node 4. Мне было интересно, включает ли он концепцию интерфейса для определения контрактов методов, как в MyClass implements MyInterface
.
Я не могу найти много с помощью Google, но, возможно, есть хороший трюк или обходной путь.
javascript
node.js
interface
ecmascript-6
Жером Верстринж
источник
источник
Ответы:
Интерфейсы не являются частью ES6, но классы являются.
Если они вам действительно нужны, обратите внимание на TypeScript, который их поддерживает .
источник
В комментариях debiasej написал упомянутую ниже статью, в которой подробно рассказывается о шаблонах проектирования (на основе интерфейсов, классов):
http://loredanacirstea.github.io/es6-design-patterns/
Книга шаблонов проектирования на javascript также может быть вам полезна:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
Шаблон проектирования = классы + интерфейс или множественное наследование
Пример фабричного шаблона в ES6 JS (для запуска: node example.js):
источник
Учитывая, что ECMA - это «бесклассовый» язык, реализация классической композиции, на мой взгляд, не имеет большого смысла. Опасность заключается в том, что, поступая таким образом, вы эффективно пытаетесь реорганизовать язык (и, если кто-то твердо убежден в этом, есть отличные целостные решения, такие как вышеупомянутый TypeScript, которые смягчают необходимость изобретать колесо)
Это не означает, что в Plain Old JS о композиции не может быть и речи. Некоторое время назад я подробно исследовал это. Самый сильный кандидат, который я видел для обработки композиции в рамках парадигмы прототипа объекта, - это stampit. , который я сейчас использую в широком спектре проектов. И, что немаловажно, он соответствует четко сформулированной спецификации.
подробнее о марках здесь
источник
class
это просто синонимstruct
. Действительно классический язык вроде Smalltalk? Он позволяет динамически расширять прототипы и даже экземплярыЭто мое решение проблемы. Вы можете «реализовать» несколько интерфейсов, заменив один интерфейс другим.
РЕДАКТИРОВАТЬ:
Я улучшил код, так что теперь вы можете просто использовать реализацию (baseClass, interface1, interface2, ...) в расширении.
источник
есть пакеты, которые могут моделировать интерфейсы.
вы можете использовать es6-интерфейс
источник
Flow позволяет специфицировать интерфейс без необходимости конвертировать весь код в TypeScript.
Интерфейсы - это способ избавиться от зависимостей при осторожном переходе в существующий код.
источник