Ca răspuns @Vitaliy Ulantikov, puteți utiliza readonlymodificatorul pe o proprietate. Aceasta acționează exact ca un getter.
interface Point {
readonly x: number;
readonly y: number;
}
Atunci când un literal obiect implementeaza interfata, nu puteți suprascrie o readonlyproprietate:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
Dar când o clasă implementează interfața, nu există nici o modalitate de a evita suprascrierea.
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!
}
}
Cred că pentru că atunci când re-declare proprietăți în definiția de clasă, ei suprascrie proprietățile interfeței, și nu mai sunt readonly.
Pentru a remedia că, utilizați readonlype proprietățile direct în clasa care implementeaza interfata
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!
}
}
A se vedea pentru tine în locul de joacă .