Есть ли способ создать интерфейсы в ES6 / Node 4?
ES6 полностью доступен в узле 4. Мне было интересно, включает ли он концепцию интерфейса для определения контрактов метода, как в MyClass implements MyInterface
.
Я не могу найти много с моим Googling, но, возможно, есть хороший трюк или обходной путь.
2 ответа:
интерфейсы не являются частью ES6, но классы есть.
Если вы действительно нуждаетесь в них, вы должны посмотреть TypeScript, который поддерживать их.
в комментариях debiasej написал упомянутую ниже статью, объясняющую больше о шаблонах проектирования (на основе интерфейсов, классов):
http://loredanacirstea.github.io/es6-design-patterns/
Design patterns книга в javascript также может быть полезна для вас:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
шаблон = классы + интерфейс или множественное наследование
An пример Заводского шаблона в ES6 JS (для запуска: пример узла.js):
"use strict"; // Types.js - Constructors used behind the scenes // A constructor for defining new cars class Car { constructor(options){ console.log("Creating Car...\n"); // some defaults this.doors = options.doors || 4; this.state = options.state || "brand new"; this.color = options.color || "silver"; } } // A constructor for defining new trucks class Truck { constructor(options){ console.log("Creating Truck...\n"); this.state = options.state || "used"; this.wheelSize = options.wheelSize || "large"; this.color = options.color || "blue"; } } // FactoryExample.js // Define a skeleton vehicle factory class VehicleFactory {} // Define the prototypes and utilities for this factory // Our default vehicleClass is Car VehicleFactory.prototype.vehicleClass = Car; // Our Factory method for creating new Vehicle instances VehicleFactory.prototype.createVehicle = function ( options ) { switch(options.vehicleType){ case "car": this.vehicleClass = Car; break; case "truck": this.vehicleClass = Truck; break; //defaults to VehicleFactory.prototype.vehicleClass (Car) } return new this.vehicleClass( options ); }; // Create an instance of our factory that makes cars var carFactory = new VehicleFactory(); var car = carFactory.createVehicle( { vehicleType: "car", color: "yellow", doors: 6 } ); // Test to confirm our car was created using the vehicleClass/prototype Car // Outputs: true console.log( car instanceof Car ); // Outputs: Car object of color "yellow", doors: 6 in a "brand new" state console.log( car ); var movingTruck = carFactory.createVehicle( { vehicleType: "truck", state: "like new", color: "red", wheelSize: "small" } ); // Test to confirm our truck was created with the vehicleClass/prototype Truck // Outputs: true console.log( movingTruck instanceof Truck ); // Outputs: Truck object of color "red", a "like new" state // and a "small" wheelSize console.log( movingTruck );