Jako odpověděl @Vitaliy Ulantikov, můžete použít readonlymodifikátor na majetku. Toto se chová přesně jako kariérista.
interface Point {
readonly x: number;
readonly y: number;
}
Když objekt doslovný implementuje rozhraní, nelze přepsat readonlyvlastnost:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
Ale když třída implementuje rozhraní, není tam žádný způsob, jak zabránit přepsání.
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!
}
}
Myslím, že je to proto, že když znovu deklarovat vlastnosti v definici třídy, které potlačí vlastnosti rozhraní, a již nejsou jen pro čtení.
Chcete-li, že pouze readonlyna vlastnostech přímo ve třídě, která implementuje rozhraní
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!
}
}
Podívejte se sami na hřišti .