我需要创建HOF(高阶函数),它将修改/添加属性到所提供类的原型。甚至有可能吗?
interface IStore {
new (): {};
}
interface IWatchable {
new() : {
watch: boolean;
};
}
const Store = <T extends IStore>(clazz: T): T & IWatchable => {
return class extends clazz {
watch = true;
};
};
class X extends Store(class {})
// ^^^^^^^^^^^^^^
// Base constructors must all have the same return type.
答案 0 :(得分:0)
如果您要进行混合,则可以使用以下模式(根据this 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
接口,并且即使Store
函数的返回未显式实现该接口,mixin类也可以分配给它(结构类型化的奇迹)
interface IWatchable {
new(): {
watch: boolean;
};
}
let w : IWatchable = X //ok