Instanciando isso no TypeScript?
Aug 19 2020
Não tenho certeza se isso é possível, mas é isso que estou tentando alcançar ...
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);
Esse tipo de coisa é possível ou eu precisaria criar um breedmétodo para cada tipo de animal?
Em ES6 JS você poderia usar, new this.constructor()mas em Typescript isso não é possível:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new this.constructor()
}
}
dará um erro:
this expression is not constructable.
Type 'Function' has no construct signatures.
Respostas
MBB Aug 19 2020 at 20:46
(property) Object.constructor: Functionis Function , In typescript você não pode fazer newem cima dele também this.constructornão é reconhecido como valor do constructor type by TypeScript, mas você pode lançar to anypara obter a nova instância. No seu caso, algo semelhante ao abaixo -
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
Em JavaScript, cada função é considerada um construtor quando usada com, newportanto, o código JavaScript está funcionando bem sem problemas.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas