Propriétés get/set
Souvent, la raison derrière les attributs privés est simplement que nous voulons mettre certaines contraintes sur les valeurs.
Pour ce faire, nous pouvons créer des méthodes proxy
permettant d'obtenir et d'assigner des propriétés.
Par exemple, nous pourrions créer deux fonctions: getX()
et setX()
.
TypeScript propose cependant une méthode standard pour les fonctions get/set.
class Position {
constructor(private _x: number, private _y: number, private _z: number) { }
equals(position: Position): boolean {
return this.x == position.x && this.y == position.y && this.z == position.z;
}
get x() {
return this._x;
}
set x(valeur: number) {
this.validationCoordonnee(valeur);
this._x = valeur;
}
get y() {
return this._y;
}
set y(valeur: number) {
this.validationCoordonnee(valeur);
this._y = valeur;
}
get z() {
return this._z;
}
set z(valeur: number) {
this.validationCoordonnee(valeur);
this._z = valeur;
}
private validationCoordonnee(coordonnee: number): void {
if(coordonnee > 100)
throw new Error('La valeur ne peut dépasser les périmètres du niveau');
}
}
let p1 = new Position(2, 2, 1);
console.log(p1.x); // 2
p1.x = 101; // Error: La valeur ne peut dépasser les périmètres du niveau