javascript - Klasse 'B' utvider feilaktig baseklassen 'A' (to private metoder med samme navn)
Jeg får feilen
Klasse 'B' arver feilaktig fra baseklassen 'A'.
Typene har separate deklarasjoner av en privat egenskap 'method'.
abstract class A {
private method() {}
}
abstract class B extends A {
private method() {}
}
Når metoden i klasse A er kommentert ut, forsvinner feilen. Hva kan jeg gjøre for å ha to private metoder som har samme navn?
Svar #1
Siden Typescript ligger på toppen av Javascript, og Javascript ikke tillater at arvede klasser har forskjellige private implementasjoner for en funksjon (alle funksjoner vil ende opp på prototype til klassen), gir det mening at Typescript ikke ville tillate deg å gjøre dette.
Hvis dette var tillatt, ville du i praksis overstyre det private medlemmet method, og siden det er merket som privat, var det sannsynligvis ikke ment for offentlig bruk/overstyring.
Du kunne overstyre funksjonen hvis du erklærte den som offentlig/beskyttet
abstract class A {
protected method() { }
}
abstract class B extends A {
protected method() { }
}
Eller hvis du virkelig vil overstyre en privat metode, kan du gjøre følgende, selv om private metoder er merket som private av en grunn, og det kan være best å unngå dette:
class B extends A {
}
(B.prototype as any)['method'] = function(this: B) {
}
