Example of mixins usage.
type Constructor <T = {}> = new(...args: any[]) => T;
function Timestamped <TBase extends Constructor> (Base: TBase) {
return class extends Base {
timestamp = Date.now();
};
}
function Restorable <TBase extends Constructor> (Base: TBase) {
return class extends Base {
restore() {
console.log('restored');
}
}
}
class Connection {
status: string;
}
const RestorableConnection = Restorable(Connection);
const TimestampedRestorableConnection = Timestamped(RestorableConnection);
new TimestampedRestorableConnection().restore();