web-dev-qa-db-ja.com

webstorm:「要素はエクスポートされません」という警告はどういう意味ですか?

私がそのようなコードをwebstormで書いたら

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

  useTest(){
    return this.test;
  }
}


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

「this.test」にマウスオーバーすると、「要素はエクスポートされません」という警告が表示されます

element is not exported wtf

どういう意味ですか? .test.test1に変更すると、警告が消えます

28
ya_dimon

私にとっては、すべての「プライベート」プロパティにアンダースコアを前に付けてマークするように働きました。明らかにWebstorm/IntelliJはプロパティをエクスポートすべきでないものとして認識しました。

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

  useTest(){
    return this._test;
  }
}


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

Webstormは、指定されていない属性の追加を防止しようとします。ゲッター/セッターを定義する必要があります。これにより、属性がダーティハックとして追加および取得されるのを防ぎます。

更新-変数を本当にプライベートにするためにWeakMapを追加しました。

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