首页 > 解决方案 > 如何从父方法创建子类型的新对象

问题描述

我可能没有正确地问这个问题......但我的班级关系如下:

export class ParentClass {
  someProperty: string;

  constructor(){}

  duplicate() {
    const dup = new this; // doesn't work for obvious reasons
    return dup; 
  }
}

export class ChildClass extends ParentClass{
  constructor(){
    super();
  }
}

因为最终我希望这两种情况都能正常工作,并成为它们最初开始的类型:

const shouldBeParent: ParentClass = new ParentClass().duplicate();
const shouldBeChild: ChildClass = new ChildClass().duplicate();

有没有办法可以推断出关于对象本身的构造函数并从中创建一个新实例?

标签: javascripttypescript

解决方案


你可以这样做:

class ParentClass {
  str = 'parent'
  constructor(){}

  duplicate() {
     // return new (<any>this.constructor); as more generic way
     return new (<typeof ParentClass>this.constructor);
  }
}

class ChildClass extends ParentClass{
  str = 'child'
  constructor(){
    super();
  }
}

const shouldBeParent: ParentClass = new ParentClass().duplicate();
const shouldBeChild: ChildClass = new ChildClass().duplicate();

console.log(shouldBeParent.str) // parent
console.log(shouldBeChild.str) // child

推荐阅读