Comme @Vitaliy Ulantikov a répondu, vous pouvez utiliser le readonlymodificateur sur une propriété. Cela agit exactement comme un getter.
interface Point {
readonly x: number;
readonly y: number;
}
Lorsqu'un littéral d'objet implémente l'interface, vous ne pouvez pas remplacer une readonlypropriété:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
Mais quand une classe implémente l'interface, il n'y a aucun moyen d'éviter l' écraser.
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!
}
}
Je suppose que c'est parce que lorsque vous choisissez déclariez les propriétés dans la définition de la classe, ils remplacent les propriétés de l'interface, et ne sont plus en lecture seule.
Pour résoudre ce problème, utilisez readonlyles propriétés directement dans la classe qui implémente l'interface
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!
}
}
Voyez vous - même dans la cour de récréation .