如何在 WebStorm 中对抗大量未解决的变量警告?

我有一个从服务器获取数据的函数:

function getData(data){
console.log(data.someVar);
}

WebStorm 说 someVar是一个未解决的变量。 我怎样才能摆脱这些警告呢?

我看到了几种选择:

  • 取消 IDE 设置中的警告;
  • 添加一个带字段的 JSON 源文件(详情) ;
  • 使用类似数组的语法: data['some_unres_var'];

此外,WebStorm 还为我提供了为“ data”创建名称空间(添加类似 /** @namespace data.some_unres_var*/的注释)、创建这样的字段或者重命名它。

78467 次浏览

使用一个带有匿名函数表达式的虚拟 js 文件,返回在 http://devnet.jetbrains.com/message/5366907中编写的 json 文本,可能是一个解决方案。我还可以建议创建一个假变量来保存这个 json 值,并使用这个变量作为@param 注释的值来让 WebStorm 知道实际的类型是什么。比如:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data */
function getData(data){
console.log(data.some_unres_var);
}

参见 http://devnet.jetbrains.com/message/5504337#5504337

使用 JSDoc:

/**
* @param \{\{some_unres_var:string}} data
*/
function getData(data){
console.log(data.some_unres_var);
}

JSDoc 对象,然后是它的成员。

/**
* @param data          Information about the object.
* @param data.member   Information about the object's members.
*/
function getData(data){
console.log(data.member);
}
  • 局部变量(非参数)的 @property
  • 在 PyCharm 中测试。@Nicholi 确认它在 WebStorm 中有效。
  • Andreas 建议的 \{\{ member:type }}语法可能与 Django 模板冲突。
  • 感谢强尼布坎南的 回答引用 @ param wiki

要编写 对象数组文档,请使用 []括号作为 JSDoc 暗示:

/**
* @param data
* @param data.array_member[].foo
*/

要删除 WebStorm IDE 上的警告,您可以简单地取消检查选项:

  • 未解析的 Javascript 函数
  • 未解析的 Javascript 变量

P .这将删除 IDE 上的警告,我认为这不是一个好主意,因为我们将失去像 Webstorm 这样的 IDE 中最好的实用程序之一,这会使我们的代码质量恶化。

即便如此,如果您想按照菜单: < strong > File > < strong > 设置 > < strong > Editor > 检查 操作,我们可以禁用 Javascript 警告

如下图所示:

uncheck options

对于一般情况,所有其他答案都是不正确的。如果没有得到 data作为参数怎么办?那你就没有 JSDoc 了:

function niceApiCall(parameters) {
const result = await ...  // HTTP call to the API here
for (const e of result.entries) {
.. // decorate each entry in the result
}
return result;
}

WebStorm 将警告“ result. entry”是一个未解析的变量(字段)。

一般的解决方案是添加 @namespace声明:

function niceApiCall(parameters) {
/** @namespace result.entries **/
const result = await ...  // HTTP call to the API here
for (const e of result.entries) {
.. // decorate each entry in the result
}
return result;
}

破坏性使用,卢克。

function getData(data){
const {member} = data;
console.log(member);
}