如何在TypeScript中为抽象类添加Mixin并返回新抽象类
TypeScript 抽象类Mixin实现方案
报错原因
- 初始TS2797报错:当Mixin继承的父类是抽象构造类型时,返回的混合类必须被声明为
abstract - 后续TS1005报错:TypeScript存在语法限制,不支持直接在
return语句后声明abstract class,必须先在当前作用域内声明抽象类,再返回
正确实现代码
abstract class ModelBase { bar() { console.log("bar") } } type GConstructor<T = {}> = abstract new (...args: any[]) => T; type Foo = GConstructor<ModelBase> // 显式标注函数返回类型:返回结合了新增方法的抽象构造器 function Foo2<TBase extends Foo>(Base: TBase): TBase & GConstructor<{ foo(): void }> { // 先在内部声明抽象类 abstract class MixinFoo extends Base { foo() { console.log(this.bar()) } } // 再返回声明好的抽象类 return MixinFoo; } export const Model = Foo2(ModelBase)
用法说明
最终导出的Model仍然是抽象类,可直接作为基类被继承,实现剩余的抽象方法即可正常使用。
内容的提问来源于stack exchange,提问作者Pablo Fernandez
相关产品推荐
相关产品推荐

