En TypeScript, les membres privés de classe sont des éléments internes à une classe qui ne peuvent être directement accessibles à l'extérieur de celle-ci. En d'autres termes, ils sont cachés du monde extérieur afin d'assurer l'intégrité et le contrôle des données, contribuant ainsi à la sécurité et à l'efficacité du code.
La bonne manière d'accès à un membre privé de classe est par des méthodes publiques de la classe. Celles-ci sont souvent appelées "getters" et "setters" car elles permettent respectivement de récupérer et de changer la valeur d'un membre privé.
Regardons un exemple de pratique courante en TypeScript :
class MaClasse {
private _monMembrePrive: string;
constructor(membre: string) {
this._monMembrePrive = membre;
}
//getter
public getMonMembrePrive(): string {
return this._monMembrePrive;
}
//setter
public setMonMembrePrive(valeur: string): void {
this._monMembrePrive = valeur;
}
}
let monObjet = new MaClasse("initial");
console.log(monObjet.getMonMembrePrive()); //affiche : initial
monObjet.setMonMembrePrive("nouvelle valeur");
console.log(monObjet.getMonMembrePrive()); //affiche : nouvelle valeur
Dans cet exemple, nous avons un membre privé _monMembrePrive
et nous livrons un accès contrôlé à cet élément privé via les méthodes getMonMembrePrive()
et setMonMembrePrive()
. En utilisant ces méthodes, nous pouvons manipuler le membre privé de manière sûre et contrôlée.
Il est à noter de plus que depuis TypeScript 3.8, une nouvelle syntaxe est disponible pour définir les membres privés de classe. On peut désormais écrire "#" devant la propriété pour indiquer qu'elle est privée. Cependant, cette fonctionnalité n'est pas encore prise en charge par tous les environnements JavaScript, et l'utilisation de "private" reste donc la méthode la plus couramment utilisée.
class MaClasse {
#monMembrePrive: string;
//...
}
Notons enfin que si le but de rendre une propriété privée est de restreindre l'écriture à cette dernière, mais pas la lecture (une propriété en lecture seule), alors TypeScript offre le mot-clé "readonly" qui peut être utilisé pour cet objectif.