gpt4 book ai didi

javascript - 在 TypeScript 中从这个实例化?

转载 作者:行者123 更新时间:2023-12-01 17:14:53 37 4
gpt4 key购买 nike

我不确定这是否可能,但这是我正在努力实现的...

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: FunctionFunction,在 typescript 中你不能在它上面做 newthis .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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com