typescript - Kan inte returnera nytt härlett objekt från gränssnitts-funktion
Typescript-koden kompileras inte.
Kompilatoroutput: fel TS2416: Egenskapen 'deepcopy' i typen 'Vector2' kan inte tilldelas samma egenskap i basklassen 'Vector'.
Jag började precis använda TypeScript igår och detta verkar vara ett trivialt problem men jag kan inte hitta en ordentlig lösning på problemet.
interface Vector {
deepcopy() : this;
}
export class Vector2 implements Vector {
constructor() {
}
deepcopy() {
return new Vector2();
}
}
Några förslag eller ledtrådar?
Svar #1
interface Vector {
deepcopy() : Vector;
}
export class Vector2 implements Vector {
constructor() {
}
deepcopy() {
return new Vector2();
}
}
Problemet med din kod är att this inte är en typ. Som en följd matchar inte Vector2 den. Genom att ändra den till Vector kan du returnera din instans som implementerar Vector-gränssnittet som du vill.
Svar #2
Jag är inte säker på om detta kommer att fungera i ditt specifika scenario, men kanske försök att använda en abstrakt klass istället:
export abstract class Vector {
deepcopy(): this {
return { ...this };
}
}
export class Vector2 extends Vector {
constructor() {
super();
}
/* custom copy logic if necessary
deepcopy(): this {
...
}
*/
}
Följande kommer att skrivas korrekt:
const a = new Vector2(); // inferred type: Vector2
const b = a.deepcopy(); // inferred type: Vector2
