在Typescript中,从基类创建子类的新实例。

10 浏览
0 Comments

在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.

有任何想法如何解决这个问题吗?

谢谢。希望对某人有所帮助 🙂

0
0 Comments

在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`来创建实例,会导致丢失类型信息。因此,正确的解决方法可能涉及到使用泛型,尽管我还没有完全弄清楚。

0