Contoh dari ini di TypeScript?
Saya tidak yakin ini mungkin, tetapi inilah yang saya coba capai ...
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);
Apakah hal semacam ini mungkin, atau apakah saya perlu membuat breed
metode untuk setiap jenis hewan?
Di ES6 JS Anda dapat menggunakan new this.constructor()
tetapi di Ketikan ini tidak mungkin:
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new this.constructor()
}
}
akan memberikan kesalahan:
this expression is not constructable.
Type 'Function' has no construct signatures.
Jawaban
(property) Object.constructor: Function
adalah Fungsi , Dalam skrip ketikan yang tidak dapat Anda lakukan new
di atasnya juga this.constructor
tidak dikenali sebagai nilai jenis konstruktor TypeScript
, tetapi Anda dapat mentransmisikan ke any
untuk mendapatkan contoh baru. Dalam kasus Anda, sesuatu yang mirip dengan di bawah ini -
abstract class Animal<T> {
breed(mate: Animal<T>) {
return new (<any>this.constructor);
}
}
Dalam JavaScript setiap fungsi dianggap sebagai konstruktor saat digunakan dengan new
demikian kode JavaScript berfungsi dengan baik tanpa masalah.