0.0.1 • Published 8 months ago
multi-extends v0.0.1
Installation
npm i multi-extends
Usage
import { multiExtends } from "multi-extends";
class Animal {
constructor(name?: string) {
if (name) this.name = name;
}
name: string = "animal";
}
function mixinRun<T extends Constructor<Animal>>(Cls: T) {
class AnimalCanRun extends Cls {
constructor(...arg: any[]) {
super(...arg);
// ...do something
}
run() {
console.log("I can run");
}
}
return AnimalCanRun;
}
function mixinFly<T extends Constructor<Animal>>(Cls: T) {
class AnimalCanFly extends Cls {
@Decorator() // you can add decorators
fly() {
console.log("I can fly");
}
}
return AnimalCanFly;
}
function Decorator(): MethodDecorator {
return function (target, propKey, descriptor) {
console.log(`${target.constructor.name} ${String(propKey)}`); // AnimalCanFly fly
};
}
class Unicorn extends multiExtends(Animal, [mixinRun, mixinFly]) {
constructor() {
super("unicorn");
}
// ...do something
}
const unicorn = new Unicorn();
console.log(unicorn.name); // unicorn
unicorn.run(); // I can run
unicorn.fly(); // I can fly
0.0.1
8 months ago