Instancier à partir de cela dans TypeScript?
Je ne suis pas sûr que ce soit possible, mais c'est ce que j'essaie de réaliser ...
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);
Est-ce que ce genre de chose est possible ou devrais-je créer une breed
méthode pour chaque type d'animal?
Dans ES6 JS, vous pouvez utiliser new this.constructor()
mais dans Typescript ce n'est pas possible:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new this.constructor()
}
}
donnera une erreur:
this expression is not constructable.
Type 'Function' has no construct signatures.
Réponses
(property) Object.constructor: Function
is Function , En typographie que vous ne pouvez pas faire new
par dessus, this.constructor
n'est pas non plus reconnu comme valeur de type constructeur par TypeScript
, mais vous pouvez effectuer un cast any
pour obtenir la nouvelle instance. Dans votre cas, quelque chose de similaire à ci-dessous -
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
En JavaScript, chaque fonction est considérée comme un constructeur lorsqu'elle est utilisée avec, par new
conséquent, le code JavaScript fonctionne correctement sans aucun problème.