javascript - Bagaimana cara memperluas dua kelas di Typescript
Saya perlu memperluas dua kelas dari namespace yang sama.
misalnya:
declare namespace myNameSpace{
class class1{
///some methods will be here
}
class class3 extends class1{
//some method wil be here
}
class class2 extends myNameSpace. class3 {
//some methods will be here
}
export namespace class2 {
//declaration will be here
}
}
saya perlu memperluas kelas 'myNameSpace.class1' serta namespace 'class2'.
class newClass extends myNameSpace.class1, myNameSpace.class2 {
constructor() {
super();
}
}
Jika saya memanggil kedua kelas tersebut, saya mendapatkan pesan kesalahan
kelas hanya dapat memperluas satu kelas
Apakah ada cara lain untuk memperbaiki masalah ini di typescript.
Jawaban #1
Apakah ada cara lain untuk memperbaiki masalah ini di typescript.
TypeScript adalah pewarisan tunggal berdasarkan desain.
Jawaban #2
Anda bisa menggunakan mixin tetapi Anda tidak bisa menimpa metode (kecuali Anda menulis metode applyMixins khusus)
Menggunakan metode:
function applyMixins(derivedCtor: any, baseCtors: any[]) {
baseCtors.forEach(baseCtor => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
derivedCtor.prototype[name] = baseCtor.prototype[name];
});
});
}
Anda harus mengimplementasikan (dengan cara kosong)
class NewClass implements myNameSpace.class1, myNameSpace.class2 {
// empty implementation
public methodFrom1 : ()=>void;
public methodFrom2 : ()=>number;
constructor() {
// no super()
}
}
sekarang gunakan mixing untuk benar-benar membuatnya memperluas banyak kelas:
applyMixins(NewClass, [myNameSpace.class1, myNameSpace.class2]);
dan sekarang Anda bisa membuat kelas
const foo = new NewClass()
foo.methodFrom1() // actually calls nameSpace.class1.prototype.methodFrom1
