在Typescript中,从基类创建子类的新实例。
在Typescript中,从基类创建子类的新实例。
我想要在基类方法中创建一个Child类的新实例。
这有点复杂,但我会尝试解释一下。
下面是一个例子:
class Base(){ constructor(){} clone(){ // 这里我想要创建一个新的实例 } } class Child extends Base(){} var bar = new Child(); var cloned = bar.clone(); clone instanceof Child // 应该为 true!
所以,从这个例子中,我想要克隆我的bar
实例,它应该是Child
的实例。
好的,我在Bar.clone
方法中尝试以下代码:
clone(){ return new this.constructor() }
...这在编译代码中可以工作,但是我有一个TypeScript错误:
error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
有任何想法如何解决这个问题吗?
谢谢。希望对某人有所帮助 🙂
在Typescript中,如果需要从基类创建子类的实例,需要进行类型转换并使用<any>
语句。下面是一个示例代码:
class Base { constructor() { } public clone() { return new (this.constructor); } } class Child extends Base { test:string; constructor() { this.test = 'test string'; super(); } } var bar = new Child(); var cloned = bar.clone(); console.log(cloned instanceof Child); // 返回'true' console.log(cloned.test); // 返回'test string'
这段代码中,`Base`是一个基类,`Child`是其子类。`Base`类中有一个`clone`方法,用于创建基于当前对象的新实例。在`clone`方法中,使用了`
如果不进行类型转换,直接使用`this.constructor`来创建实例,会导致丢失类型信息。因此,正确的解决方法可能涉及到使用泛型,尽管我还没有完全弄清楚。