我需要一个定义IClonable
成员的clone()
接口,它返回实现它的类的实例。
如果可能,我如何指出clone()
的返回类型与调用它的类相同?
interface IClonable {
clone(): ???
}
我知道我可以用下面的泛型做到这一点,但这看起来过于冗长
interface IClonable<T> {
clone(): T
}
答案 0 :(得分:7)
非常简单地将返回类型设置为this
interface IClonable {
clone(): this;
}
答案 1 :(得分:2)
你是对的,使用泛型是做到这一点的方法,即使它很冗长..
你也可以:
interface IClonable {
clone(): any;
}
或
interface IClonable {
clone(): any;
clone<T>(): T;
}
或
interface IClonable {
clone(): IClonable;
}
但使用泛型可能是最好的方法。
@Silvermind下面的评论让我检查了clone<T>(): T
的建议代码,我错了,因为它没有编译。
首先,这是一个显示我的意思的代码:
class Point implements IClonable {
private x: number;
private y: number;
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
public clone<T>(): T {
return <T> new Point(this.x, this.y);
}
}
var p1 = new Point(1, 2);
var p3 = p1.clone<Point>();
基本上是在clone
方法中执行强制转换而不是转换返回的值
但是<T> new Point(this.x, this.y)
会产生:
既不键入&#39;点'也不键入&#39; T&#39;可分配给对方