Javascript 在TypeScript中从中实例化?

Javascript 在TypeScript中从中实例化?,javascript,typescript,Javascript,Typescript,我不确定这是否可能,但这正是我想要实现的 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)

我不确定这是否可能,但这正是我想要实现的

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);
将给出一个错误:

this expression is not constructable.
Type 'Function' has no construct signatures.
(property)Object.constructor:Function
Function,在typescript中,您不能在其上执行
新建
。构造函数不会被
typescript
识别为构造函数类型的值,但您可以强制转换到
任何
以获取新实例。在您的情况下,类似于以下内容-

abstract class Animal<T> {
  breed(mate: Animal<T>) {
    return new (<any>this.constructor);
  }
}
抽象类动物{
品种(配偶:动物){
返回新的(this.constructor);
}
}

在JavaScript中,当与
new
一起使用时,每个函数都被视为构造函数,因此JavaScript代码运行良好,没有任何问题。

注意,这不是一个真正的TypeScript问题,类型是正确的(尽管
breed
也应该有一个返回类型
Animal
);您需要知道如何在JavaScript中实现这一点,因为它发生在运行时。这是否回答了您的问题?您可以在ES6中执行此操作,但我在Typescript中没有任何运气。。。我得到一个错误:“这个表达式是不可构造的。类型‘Function’没有构造签名。”哦,很有趣。那么你能给我一个最新的问题吗
abstract class Animal<T> {
  breed(mate: Animal<T>) {
    return new (<any>this.constructor);
  }
}