Если вы хотите сделать миксин, это шаблон, который будет работать (согласно этот PR ):
interface IStore {
new(...a: any[]): {};
}
const Store = <T extends IStore>(clazz: T) => {
return class extends clazz {
watch = true;
};
};
class X extends Store(class { }) { }
Это должно дать вам то, что вы хотите, вы можете иметь интерфейс IWatchable
, и классы mixin будут назначаться ему, даже если функция возврата Store
не реализует интерфейс явно (чудо структурной типизации) )
interface IWatchable {
new(): {
watch: boolean;
};
}
let w : IWatchable = X //ok