human
Y a-t-il un moyen d'avoir un setter privé pour une propriété en TypeScript ?
```class Test
{
    private _prop: string;
    public get prop() : string
    {
        return this._prop;
    }
    private set prop(val: string)
    {
        //peut mettre des points d'arrêt ici
        this._prop = val;
    }
}
```
Le compilateur se plaint que la visibilité du getter et du setter ne correspond pas. Je sais que je peux simplement définir le champ de sauvegarde, mais alors je ne peux pas mettre de points d'arrêt lorsque la valeur est définie.
J'ai pensé à utiliser une interface pour masquer le setter, mais les interfaces ne peuvent définir qu'une propriété, pas si elle a un getter ou un setter.
Est-ce que je manque quelque chose ici ? Il ne semble pas y avoir de raison de ne pas autoriser les setters privés, le JS résultant n'impose de toute façon pas la visibilité, et semble meilleur que les alternatives actuelles.
Est-ce que je manque quelque chose ? Sinon, y a-t-il une bonne raison de ne pas autoriser les setters privés
gpt
La spécification TypeScript (8.4.3) dit"

  Les accesseurs pour le même nom de membre doivent spécifier la même accessibilité

Vous devez donc choisir une alternative appropriée. Voici deux options pour vous:
Vous pouvez simplement ne pas avoir de setter, ce qui signifie que seule la classe ```Test``` peut définir la propriété. Vous pouvez placer un point d'arrêt sur la ligne ```this._prop =...```.
```class Test
{
    private _prop: string;
    public get prop() : string
    {
        return this._prop;
    }
    doSomething() {
        this._prop = 'Je peux le définir !';
    }
}
var test = new Test();
test._prop = 'Je ne peux pas !';
```
Probablement la meilleure façon de garantir que l'accès privé donne quelque chose de similaire à un modèle de "notify property changed" peut être implémentée en ayant une paire d'accesseurs de propriété privés get/set, et un accesseur de propriété publique séparé.

Vous devez toujours être prudent si quelqu'un ajoute ultérieurement un appel direct au champ de sauvegarde. Vous pouvez être créatif dans ce domaine pour essayer de le rendre moins probable.
```class Test
{
    private _nameBackingField: string;
    private get _name() : string
    {
        return this._nameBackingField;
    }
    private set _name(val: string)
    {
        this._nameBackingField = val;
        // autres actions... notifier que la propriété a changé, etc.
    }
    public get name(): string {
        return this._name;
    }
    doSomething() {
        this._name += 'Des choses supplémentaires';
    }
}
```