我正在测试方法链,发现可以使用“this”作为返回类型来完成吗?
以下是一个例子:
class Shape {
color: String;
setColor(value: string): this { //Shape won't chain
this.color = value;
return this;
}
}
class Square extends Shape {
width: number;
setWidth(value: number): Square {
this.width = value;
return this;
}
}
function drawSquare(square: Square) {
alert("width: " + square.width + "\ncolor: " + square.color);
}
let rect = new Square().setWidth(20).setColor("blue");
drawSquare(rect);
这是在混合基类和继承类时实现方法链的正确方法吗?
答案 0 :(得分:6)
当然,使用多态this
可以使流畅的api很容易表达,因为任何子类型都会流动。使用this
类型。查看Advanced Types部分和F-bounded polymorphism
。