class Person {
speak() { console.log('je parle'); }
walk() { console.log('je marche'); }
}
class Alien {
telepathy() { console.log('test'); }
}
type Class = new (...args: any[]) => any;
function PersonMixin<Base extends Class>(base: Base) {
return class extends base {
speak() { console.log('je parle'); }
walk() { console.log('je marche'); }
}
}
function AlienMixin<Base extends Class>(base: Base) {
return class extends base {
telepathy() { console.log('test'); }
}
}
const PersonAndAlien = PersonMixin(AlienMixin(class {
}));
const testMixin = new PersonAndAlien();
testMixin.speak();
testMixin.walk();
testMixin.telepathy();
//
//
// Le code suivant est valide :
//
interface Roger extends Person, Alien {};
const test: Roger = {
speak(): void {},
walk(): void {},
telepathy(): void {}
}