【问题标题】:TypeScript declare method return type is instance type of class or subclassTypeScript 声明方法返回类型是类或子类的实例类型
【发布时间】:2019-10-06 15:25:36
【问题描述】:

打字稿中有没有办法声明一个返回当前实例类型的方法?

例如:

class AnimalBuilder {

    withColor:(color: Color): AnimalBuilder    { 
       this.color = color; 
       return this; 
    } 

}

class DogBuilder extends AnimalBuilder { 
    //builder methods specific to a dog. 
}

。 .这样调用

new DogBuilder().withColor()

返回类型为DogBuilder 而不是AnimalBuilder。在 Objective-c 中,这样的东西称为instancetype。我在 TypeScript 中查看了InstanceType<T>,但无法弄清楚它是否在谈论同一件事。

这将允许以任何顺序在超类和子类上链接构建器方法,例如:

new DogBuilder().withColor(Color.BLUE).withBreed(breed).withEtc()

。 .无需在子类上添加任何额外的内容来支持这一点。

【问题讨论】:

    标签: javascript typescript oop


    【解决方案1】:

    你可以在你的基类中省略返回参数,或者如果你想在方法上显示返回类型,你可以返回this(可能更简洁一些)。

    class AnimalBuilder {
        color?: Color;
        withColor(color: Color): this { 
           this.color = color; 
           return this; 
        } 
    }
    

    请参阅playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2014-01-11
      • 2021-07-28
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多