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
相关产品推荐
相关产品推荐

