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

时间:2013-12-30 07:53:03

标签: javascript coding-style webstorm

好的,我有一个从ajax获取数据的函数:

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

Webstorm说some_unres_var - 是未解决的变量。 我不知道如何处理这么多警告。

我看到几个选项:

  • 禁止警告;
  • 添加带有字段的json源文件(更多details);
  • 使用类似数组的语法:data['some_unres_var'](但jslint警告我不要这样做);
  • ???

Webstorm也让我为“数据”创建命名空间(添加注释,如/** @namespace data.some_unres_var*/),创建此类字段或重命名。

5 个答案:

答案 0 :(得分:91)

使用JSDoc:

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

答案 1 :(得分:39)

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模板冲突。
  • 感谢Jonny Buchanan的answer引用@param wiki

要记录对象数组,请使用[]括号作为JSDoc suggests

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

答案 2 :(得分:12)

一般情况下所有其他答案都不正确。如果您没有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.entries"是一个未解决的变量(字段)。

一般解决方案是添加@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;
}

答案 3 :(得分:6)

使用带有匿名函数表达式的伪js文件返回json文字,如http://devnet.jetbrains.com/message/5366907所示,可能是一个解决方案。我还建议创建一个保存此json值的伪变量,并将此var用作@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

答案 4 :(得分:2)

破坏性使用,卢克。

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