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 breedmé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: Functionis Function , En typographie que vous ne pouvez pas faire newpar dessus, this.constructorn'est pas non plus reconnu comme valeur de type constructeur par TypeScript, mais vous pouvez effectuer un cast anypour 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 newconséquent, le code JavaScript fonctionne correctement sans aucun problème.