You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:04