接口方法能否返回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
相关产品推荐
相关产品推荐

