webstorm:“元素未导出”警告是什么意思?

问题描述 投票:0回答:3

如果我在webstorm中写这样的代码

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

  useTest(){
    return this.test;
  }
}


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

将鼠标悬停在“this.test”上,我看到警告:“元素未导出”

这是什么意思? 如果我将

.test
更改为
.test1
,警告就会消失

javascript ecmascript-6 warnings webstorm
3个回答
9
投票

对我来说,它可以用带前缀的下划线标记所有“私有”属性。显然 Webstorm/IntelliJ 认为这些属性不应该导出。

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

  useTest(){
    return this._test;
  }
}


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

7
投票

Webstorm 只是试图阻止您添加未指定的属性。您需要定义 getter/setter。这可以防止添加和获取属性作为肮脏的黑客行为。

更新 - 添加 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());

0
投票

这是一个奇怪的错误消息,我怀疑是由 WebStorm 中的某些错误引起的。

我在 .mjs 文件的类中有这两种方法:

 reports_elementIsNotExported_error ()
 { let abc = bad;
 }

 reports_unresolvedVariableOrType_error ()
 { let abc = bad77;
 }

当我对此文件运行 WebStorm 检查时 第一个方法报告“元素未导出”。

第二个报告“类型为 bad77 的未解析变量

我查看了 Node.js 的“global”,发现“bad”和“bad77”都不作为其字段存在。为什么“bad”会产生与“bad77”不同的消息,我不知道。

© www.soinside.com 2019 - 2024. All rights reserved.