Als @Vitaliy Ulantikov beantwortet, können Sie das verwenden readonlyModifikator auf einem Grundstück. Dies wirkt genau wie ein Getter.
interface Point {
readonly x: number;
readonly y: number;
}
Wenn ein Objektliteral die Schnittstelle implementiert, können Sie eine nicht überschreiben readonlyEigenschaft:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
Aber wenn eine Klasse die Schnittstelle implementiert, gibt es keine Möglichkeit , es zu überschreiben zu vermeiden.
class PointClassBroken implements Point {
// these are required in order to implement correctly
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x // no error!
this.y = y // no error!
}
}
Ich denke, das ist, weil, wenn Sie Eigenschaften in der Klassendefinition neu erklären, sie die Eigenschaften der Schnittstelle zu überschreiben, und nicht mehr nur lesbar.
Um das zu beheben, verwenden Sie readonlydie Eigenschaften direkt in der Klasse , die die Schnittstelle implementiert
class PointClassFixed implements Point {
readonly x: number;
readonly y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x // error!
this.y = y // error!
}
}
Überzeugen Sie sich selbst in den Spielplatz .