TypeScript声明方法的返回类型是类或子类的实例类型

时间:2019-10-06 04:32:07

标签: javascript typescript oop

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

例如:

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()

。 。不必在子类上添加任何多余的东西来支持这一点。

1 个答案:

答案 0 :(得分:3)

您可以只在基类中省略return参数,或者如果您想在方法上显示返回类型(可以更简洁),则可以返回this

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

请参阅playground