Metodöverladdning i härledda klasser i Typescript
Det jag har i åtanke är ganska enkelt:
class A {
getSomething(name: string): number {
return 1;
}
}
class B extends A {
getSomething(n: number, name: string): number {
return 2;
}
}
En metod som definieras i en klass bör överlagras med en ytterligare parameter i en underklass. I verkligheten kommer metoden i klass B att gå via A beroende på den nya parametern. Men jag får felet:
Klass 'B' utökar felaktigt basklassen 'A'. Typerna för egenskapen 'getSomething' är inkompatibla. Typen '(n: number, name: string) => number' kan inte tilldelas typen '(name: string) => number'.
Se denna kod i lekplatsen. Vad skulle vara rätt tillvägagångssätt här? Är detta alls möjligt?
Svar #1
Du kan uttryckligen deklarera de överlagrade funktionssignaturerna:
class A {
getSomething(name: string): number {
return 1;
}
}
class B extends A {
getSomething(name: string): number;
getSomething(n: number, name: string): number;
getSomething(n, name?) {
return 2;
}
}
REDIGERA
Med det ovanstående överskrider du också den ursprungliga funktionen. Det är ditt ansvar att kalla på superklassens funktion när parametrarna ges på det sättet. Ett exempel:
class A {
getSomething(name: string): number {
return 1;
}
}
class B extends A {
getSomething(name: string): number;
getSomething(n: number, name: string): number;
getSomething(n: any, name?: any): any {
if (typeof name !== "string") {
return super.getSomething(n);
}
return 2;
}
}
