web-dev-qa-db-fra.com

webstorm: que signifie l'avertissement "L'élément n'est pas exporté"?

si j'écris un tel code dans webstorm

export class someOne {
  constructor(param) {
    this.test = param;
  }

  useTest(){
    return this.test;
  }
}


console.log(new someOne(123).useTest());

et passez la souris sur "this.test" je vois l'avertissement: "L'élément n'est pas exporté"

element is not exported wtf

qu'est-ce que ça veut dire? si je change le .test à .test1 l'avertissement disparaît

28
ya_dimon

Pour moi, cela a fonctionné de marquer toutes les propriétés "privées" avec un trait de soulignement préfixé. De toute évidence, Webstorm/IntelliJ a reconnu les propriétés comme quelque chose qui ne devrait pas être exporté.

export class someOne {
  constructor(param) {
    this._test = param;
  }

  useTest(){
    return this._test;
  }
}


console.log(new someOne(123).useTest());
9
Fabian

Webstorm essaie juste de vous empêcher d'ajouter des attributs non spécifiés. Vous devez définir des getters/setters. Cela empêche l'ajout et la récupération d'attributs comme des hacks sales.

Mise à jour - ajout de WeakMap pour que les variables soient vraiment privées.

let testWeakMap = new WeakMap();
export class someOne {
    constructor(param) {
        this.test = param;
    }

    useTest(){
        return this.test;
    }

    get test () {
        return testWeakMap.get(this);
    }

    set test (value) {
        testWeakMap.set(this, value);
    }
}
console.log(new someOne(123).useTest());
4
Niels Steenbeek