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

如何推断类方法的未知返回类型并将其用于类属性?

解决方案:通过泛型抽象类实现类型推断

可以实现,核心是将抽象类定义为泛型抽象类,让TypeScript根据子类initialize方法的返回值自动推断泛型参数类型,从而约束prop的类型。

完整实现代码

class Base {
  method_1() {}
}

class Child extends Base {
  method_2() {}
}

// 将抽象类定义为泛型类,泛型C约束为Base的子类
abstract class AbstractClass<C extends Base> {
  prop!: C; // 用!断言避免初始化报错,或在构造函数中赋值

  // 抽象方法返回类型为泛型C
  abstract initialize(): C;
}

class UserClass1 extends AbstractClass {
  initialize() {
    return new Base();
  }

  someMethod() {
    this.prop.method_1(); // ✅ 类型正确,无报错
    this.prop.method_2(); // ❌ 报错:Base不存在method_2方法
  }
}

class UserClass2 extends AbstractClass {
  initialize() {
    return new Child();
  }

  someMethod() {
    this.prop.method_1(); // ✅ 类型正确,无报错
    this.prop.method_2(); // ✅ 类型正确,无报错
  }
}

关键说明

  • 泛型约束:AbstractClass<C extends Base>确保C必须是Base或其子类,符合你对initialize返回值的要求
  • 自动推断:子类继承AbstractClass时,无需手动指定C的类型,TypeScript会根据initialize方法的返回值自动推断出C的具体类型
  • 类型安全:prop的类型会同步为推断出的C类型,因此在调用方法时会得到准确的类型检查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:12:34