Como respondió @Vitaliy Ulantikov, puede utilizar el readonlymodificador en una propiedad. Esto actúa exactamente igual que un comprador.
interface Point {
readonly x: number;
readonly y: number;
}
Cuando un objeto literal implementa la interfaz, no se puede sobrescribir una readonlypropiedad:
let p1: Point = { x: 10, y: 20 };
p1.x = 5; // error!
Pero cuando una clase implementa la interfaz, no hay manera de evitar sobrescribir ella.
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!
}
}
Supongo que es porque cuando se vuelva a declarar propiedades en la definición de clase, que anulan las propiedades de la interfaz, y ya no son de sólo lectura.
Para corregir esto, utilizar readonlyen las propiedades directamente en la clase que implementa la interfaz
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!
}
}
Ver por sí mismo en el parque infantil .