因此,为简化起见,假设我有一个方法如下
<script src="https://www.google.com/recaptcha/api.js?onload=showSweetAlertRecaptcha"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
正如您所看到的,实际逻辑完全相同,这使得复制它有点愚蠢。在调用方法并传递它(例如,sum(o: Point | Vector): Point | Vector {
if (o instanceof Point) {
return new Point(o.x + this.x, o.y + this.y, o.z + this.z)
}
if (o instanceof Vector) {
return new Vector(o.x + this.x, o.y + this.y, o.z + this.z)
}
}
对象时,返回类型未正确派生。我必须对Point
做一个明确的演员。
我可以使用通用类型并将参数声明为Point
,但当然它不会识别T
,x
和y
变量。
我的问题有点像this一个,但区别我的类型不是数组而且问题没有答案。
在TypeScript中可以更好地解决这个问题吗?
答案 0 :(得分:2)
您可以显式地传递具有泛型约束的构造函数。
function sum<T extends Point | Vector>(c: new (a: number, b: number,c: number) => T, o: T): (T) {
return new c(o.x + this.x, o.y + this.y, o.z + this.z);
}
let t = x.sum(Point, new Point(1, 2, 3));
答案 1 :(得分:0)
我认为您应该使用带限制的泛型类型,例如:
export abstract class SumableClass {
public sum<T extends SumableClass >(o: T): T {
return o.constructor(o.x + this.x, o.y + this.y, o.z + this.z);
}
constructor(public x: number, public y: number, public z: number) {
}
}
还定义了一个抽象(SumableClass),Point和Vector应该从它继承