如何在 Typescript 中将两个 classes 作为基础 class 相交以扩展 class
How to intersect two classes as base class for extended class in Typescript
我需要创建 HOF(高阶函数),它将 modify/add 属性 提供给 class 的原型。有可能吗?
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.
如果你想做混合,这是可行的模式(根据 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
接口,即使 [=13= 的 return ,mixin 类 也可以分配给它] 函数没有显式实现接口(结构类型的奇迹)
interface IWatchable {
new(): {
watch: boolean;
};
}
let w : IWatchable = X //ok
我需要创建 HOF(高阶函数),它将 modify/add 属性 提供给 class 的原型。有可能吗?
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.
如果你想做混合,这是可行的模式(根据 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
接口,即使 [=13= 的 return ,mixin 类 也可以分配给它] 函数没有显式实现接口(结构类型的奇迹)
interface IWatchable {
new(): {
watch: boolean;
};
}
let w : IWatchable = X //ok