从 Typescript 中的基类创建子类的新实例 [重复]
Posted
技术标签:
【中文标题】从 Typescript 中的基类创建子类的新实例 [重复]【英文标题】:Create new instance of Child class from Base class in Typescript [duplicate] 【发布时间】:2016-03-31 23:41:26 【问题描述】:我想从 Base 类方法创建 Child 类的新实例。
这有点复杂,但我会尽力解释。
这是一个例子:
class Base()
constructor()
clone()
//Here i want to create new instance
class Child extends Base()
var bar = new Child();
var cloned = bar.clone();
clone instanceof Child //should be true!
所以。在这个例子中,我想克隆我的bar
实例,它应该是Child
的实例
嗯。我正在尝试使用Bar.clone
方法:
clone()
return new this.constructor()
...这适用于编译代码,但我有打字稿错误:
error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.
有什么办法可以解决这个问题吗?
谢谢。希望这对一些人有所帮助1 :)
【问题讨论】:
如果有人仍然遇到这种情况并寻找不丢弃类型信息的解决方案,这里发布的关于返回this
的策略 (***.com/a/45871004/131782) 似乎有效。
【参考方案1】:
克隆未知对象时,您需要强制转换为通用对象。
最好的方法是使用<any>
语句。
class Base
constructor()
public clone()
return new (<any>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); // returns 'true'
console.log(cloned.test); // returns 'test string'
【讨论】:
不能说this.constructor派生自Base吗? 这样做会丢失类型信息。正确的解决方案可能涉及泛型,尽管我还没有完全弄清楚。以上是关于从 Typescript 中的基类创建子类的新实例 [重复]的主要内容,如果未能解决你的问题,请参考以下文章