moștenire - De ce această subclasă TypeScript nu moștenește interfețele implementate de superclasa sa?
Ia în considerare următorul cod TypeScript:
interface MyInterface {
foo?(x : string) : void;
}
class One implements MyInterface {
}
class Two extends One implements MyInterface {
foo(x : number) : void {
}
}
Compilarea acestuia aruncă o eroare, așa cum era de așteptat: Proprietatea 'foo' din tipul 'Two' nu este atribuibilă aceleași proprietăți din tipul de bază 'MyInterface'.
Când elimin „implements MyInterface” din clasa Two, eroarea dispare. M-aș fi așteptat ca clasa Two să moștenească de la clasa One faptul că implementează MyInterface și, prin urmare, să fie în continuare compatibilă cu acesta.
Venind dintr-un background Java, am considerat că am înțeles greșit sistemul de tipuri în TS, în special dacă o instanță a unei subclase „este o” instanță a clasei superioare. Pentru a verifica, am adăugat metoda cu un parametru de tip string în clasa One, dar aceasta generează o eroare: Proprietatea 'foo' din tipul 'Two' nu poate fi atribuită aceleași proprietăți din tipul de bază 'One' -- ceea ce m-a condus din nou la concluzia că subclasele TS au o relație „este-o” la fel ca în Java. Dar asta înseamnă că încă nu înțeleg de ce clasa Two nu moștenește de la clasa One faptul că implementează MyInterface.
Ce am greșit?