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

接口方法能否返回this类型?与返回Builder类型效果是否一致?

问题解答

1. 接口中的方法是否允许返回this类型?

允许。TypeScript支持在接口方法中使用this类型(即多态this类型),用来定义方法返回调用该方法的对象的实际类型,这是TypeScript面向对象编程里的常用特性。

2. 该写法与方法直接返回Builder类型的效果是否完全相同?

不一样,核心区别体现在子类继承场景:

  • 如果接口定义build(): Builder,那么不管是Builder实例还是它的子类实例调用build(),返回类型都会被约束为Builder。比如子类SubBuilder继承Builder后,调用new SubBuilder().build()得到的是Builder类型,无法直接链式调用子类特有的方法。
  • 如果接口定义build(): this,调用build()的返回类型会是调用对象的实际类型。比如new SubBuilder().build()返回的是SubBuilder类型,能直接继续调用子类的专属方法,保留了类型的多态性。

举个具体的代码例子:

interface IBuilder {
  build(): this;
}

class Builder implements IBuilder {
  build(): this {
    return this;
  }
}

class SubBuilder extends Builder {
  setSubOption() {
    return this;
  }
}

// 正常链式调用,因为build()返回SubBuilder类型
new SubBuilder().build().setSubOption();

// 如果接口定义build(): Builder,下面这行代码会报错,因为Builder类型没有setSubOption方法
// new SubBuilder().build().setSubOption();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:35:44