Создание экземпляра этого в TypeScript?
Aug 19 2020
Я не уверен, что это возможно, но это то, чего я пытаюсь достичь ...
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.
Ответы
MBB Aug 19 2020 at 20:46
(property) Object.constructor: Function
is Function , в машинописном тексте вы не можете делать new
поверх него, также this.constructor
не распознается как значение типа конструктора by TypeScript
, но вы можете привести к, any
чтобы получить новый экземпляр. В вашем случае что-то подобное ниже -
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
В JavaScript каждая функция при использовании рассматривается как конструктор, new
поэтому код JavaScript работает нормально без каких-либо проблем.