I really hope there is a better way, but here is what I am doing now:
class Base{
clone(): this {
return new (this.constructor as any)();
}
}
class Derived extends Base {
}
class DerivedAgain extends Derived {
}
const d1=new Derived();
const d2 = d1.clone();
const d3 = new DerivedAgain().clone();
d2has a type Derived, but d3has a type DerivedAgain, as expected.
source
share