Wie @Vitaliy Ulantikov antwortete, können Sie den readonlyModifikator für eine Eigenschaft verwenden. Dies verhält sich genau wie ein Getter.
interface Point {
readonly x: number;
readonly y: number;
}
Wenn ein Objektliteral die Schnittstelle implementiert, können Sie eine readonlyEigenschaft nicht überschreiben :
let p1: Point = { x: 10, y: 20 };
p1.x = 5;
Wenn eine Klasse die Schnittstelle implementiert, kann das Überschreiben nicht vermieden werden.
class PointClassBroken implements Point {
x: number;
y: number;
constructor(x: number, y: number) {
this.x = x
this.y = y
}
changeCoordinates(x: number, y: number): void {
this.x = x
this.y = y
}
}
Ich denke, das liegt daran, dass beim erneuten Deklarieren von Eigenschaften in der Klassendefinition diese die Eigenschaften der Schnittstelle überschreiben und nicht mehr schreibgeschützt sind.
Um dies 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
this.y = y
}
}
Überzeugen Sie sich selbst auf dem Spielplatz .