@webreflection/interface

0.1.1 • Public • Published

interface Build Status Coverage Status

Simple interfaces for modern JavaScript.

npm -i @webreflection/interface

API

There are two functions usable through Object or any Function.prototype:

  • Object.interface([iFace, ...iFace, ]{object: 'literal'}) to defines left to right interfaces properties on top of the newly created interface
  • Object.implements(iFace[, ...iFace]) to create a new object that implements all interfaces (still left to right)

Both methods can be also used to define classes:

  • Function.interface([iFace, ...iFace, ]class {}) to defines left to right classes implementing the optional list of previous interfaces as parameters
  • class extends AnyClass.implements(iFace[, ...iFace]) to create a new intermediate class that implements all interfaces (still left to right)

Peculiarities

  • all interfaces properties and symbols are forced as non enumerable
  • all interfaces are created through the same internal class with a null object as prototype

Last point means that objects interfaces do not have toString methods or constructors. These are indeed meant to be used as interfaces only, not as generic objects.

Example

// Function.prototype polluted, deal with it!
require('@webreflection/interface');

// an interface is just an object
// carrying some definition that can be implemented
// through other objects or classes
const EventListener = Object.interface({
  handleEvent(e) { this['on' + e.type](e); }
});

// but it can be defined through a class too
// in such case you can even new EventListener
// or directly extends EventListener
const EventListener = Function.interface(class {
  handleEvent(e) { this['on' + e.type](e); }
});

// a simple clicker class (it could directly extends EventListener too)
class Clicker {
  constructor() { super(); this.clicks = 0; }
  onclick(e) {
    e.preventDefault();
    console.log(`You clicked me ${++this.clicks} times`);
  }
}

// a BasicClicker that extends Clicker and implements EventListener
class BasicClicker extends Clicker.implements(EventListener) {
  constructor(node) {
    super();
    node.addEventListener('click', this);
  }
}

new BasicClicker(document.documentElement);

Dependents (1)

Package Sidebar

Install

npm i @webreflection/interface

Weekly Downloads

117

Version

0.1.1

License

ISC

Last publish

Collaborators

  • webreflection