arv - Varför ärver inte denna Typescript-subklass de gränssnitt som dess superklass implementerar?
Tänk på följande TypeScript-kod:
interface MyInterface {
foo?(x : string) : void;
}
class One implements MyInterface {
}
class Two extends One implements MyInterface {
foo(x : number) : void {
}
}
Att kompilera detta ger ett fel som förväntat: Egenskapen 'foo' i typen 'Two' kan inte tilldelas samma egenskap i bastypen 'MyInterface'.
När jag tar bort "implements MyInterface" i klass Two, försvinner felet. Jag skulle ha förväntat mig att klass Two ärver från klass One att den implementerar MyInterface, och därför borde den fortfarande vara kompatibel med det.
Kommer från en Java-bakgrund, övervägde jag att jag missförstod typ-systemet i TS, särskilt huruvida en subklassinstans ”är en” superklassinstans. För att verifiera lade jag till metoden med en strängparameter i klass One, men detta ger ett fel: Egenskapen 'foo' i typ 'Two' kan inte tilldelas samma egenskap i basklassen 'One' -- vilket återigen ledde mig till slutsatsen att TS-subklasser har en ”är-en” relation precis som i Java. Men det betyder att jag fortfarande inte förstår varför klass Two inte ärver från klass One det faktum att den implementerar MyInterface.
Vad gjorde jag fel?