我不确定这是否可能,但这是我正在努力实现的...
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new [this kind of animal]()
}
}
class Cat extends Animal<Cat>{
}
let cat1 = new Cat();
let cat2 = new Cat();
let kitten = cat1.breed(cat2);
这种事情是否可能,或者我是否需要为每种动物创建一个 breed
方法?
在 ES6 JS 中你可以使用 new this.constructor()
但在 Typescript 中这是不可能的:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new this.constructor()
}
}
会报错:
this expression is not constructable.
Type 'Function' has no construct signatures.
最佳答案
(property) Object.constructor: Function
是 Function,在 typescript 中你不能在它上面做 new
也 this .constructor
未被 TypeScript
识别为构造函数类型的值,但您可以转换为 any
以获取新实例。在您的情况下,类似于以下内容-
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
在 JavaScript 中,当与 new
一起使用时,每个函数都被视为构造函数,因此 JavaScript 代码可以正常工作,没有任何问题。
关于javascript - 在 TypeScript 中从这个实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63485248/