Подтвердить что ты не робот

Webstorm: что означает "Элемент не экспортируется"?

если я пишу такой код в webstorm

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

  useTest(){
    return this.test;
  }
}


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

и mouseover на "this.test" я вижу предупреждение: "Элемент не экспортируется"

элемент не экспортируется wtf

что это значит? если я изменяю .test на .test1, предупреждение исчезает

4b9b3361

Ответ 1

Для меня это сработало, чтобы отметить все свойства "private" с префиксом подчеркивания. Очевидно, что Webstorm/IntelliJ признал свойства как что-то, что не следует экспортировать.

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

  useTest(){
    return this._test;
  }
}


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

Ответ 2

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());