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

TypeScript中是否可在抽象类构造函数内实例化泛型类

TypeScript 抽象类泛型实例化问题解答

你给出的实现不可行,核心原因如下:

  • TypeScript 泛型属于编译期的类型语法,编译为 JavaScript 后所有泛型信息会被完全擦除,运行时不存在T这个实体值,无法直接调用new T()创建实例。

如果要实现类似需求,需要手动将泛型对应的构造函数作为参数传入抽象类构造函数,参考实现如下:

export abstract class BaseClass<T> {
  protected instance: T;
  // 参数接收T对应的构造函数
  constructor(ctor: new () => T) {
    this.instance = new ctor();
  }
}

// 实际业务类
class User {
  id = 1;
  name = "测试用户";
}

// 子类继承时传入对应构造函数
class UserService extends BaseClass<User> {
  constructor() {
    super(User);
  }
}

如果需要支持带参数的构造函数,可以调整定义兼容参数传递:

export abstract class BaseClass<T> {
  protected instance: T;
  constructor(ctor: new (...args: any[]) => T, ...args: any[]) {
    this.instance = new ctor(...args);
  }
}

内容的提问来源于stack exchange,提问作者Madriesen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:45:05