¿Creando una instancia de esto en TypeScript?
No estoy seguro de que esto sea posible, pero esto es lo que estoy tratando de lograr ...
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);
¿Es posible este tipo de cosas o necesitaría crear un breed
método para cada tipo de animal?
En ES6 JS puede usar, new this.constructor()
pero en Typescript esto no es posible:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new this.constructor()
}
}
dará un error:
this expression is not constructable.
Type 'Function' has no construct signatures.
Respuestas
(property) Object.constructor: Function
es Función , en el mecanografiado no se puede hacer new
encima de él, tampoco this.constructor
se reconoce como valor del tipo de constructor TypeScript
, pero se puede convertir any
para obtener la nueva instancia. En su caso, algo similar a lo siguiente:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
En JavaScript, cada función se considera un constructor cuando se usa con, new
por lo tanto, el código JavaScript funciona bien sin problemas.