Javascript 如何应对WebStorm中大量未解决的变量警告?

Javascript 如何应对WebStorm中大量未解决的变量警告?,javascript,webstorm,Javascript,Webstorm,我有一个从服务器获取数据的函数: function getData(data){ console.log(data.someVar); } WebStorm说,someVar是一个未解析的变量。 我怎样才能摆脱这种警告呢 我看到几个选择: 抑制IDE设置中的警告 添加带有字段()的JSON源文件 使用类似数组的语法:data['some_unr_var'] 另外,WebStorm提供给我为“数据”创建名称空间(添加一个注释,如/**@名称空间数据。有些注释是*/),创建这样的字段,

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

function getData(data){
    console.log(data.someVar);
}
WebStorm说,
someVar
是一个未解析的变量。 我怎样才能摆脱这种警告呢

我看到几个选择:

  • 抑制IDE设置中的警告
  • 添加带有字段()的JSON源文件
  • 使用类似数组的语法:
    data['some_unr_var']

另外,WebStorm提供给我为“数据”创建名称空间(添加一个注释,如
/**@名称空间数据。有些注释是*/
),创建这样的字段,或者重命名它。

使用一个带有匿名函数表达式的伪js文件,返回json文本,如中所述,可能是一个解决方案。我还建议创建一个伪变量来保存这个json值,并使用这个变量作为@param注释的值,让WebStorm知道实际的类型是什么。比如:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data */
function getData(data){
    console.log(data.some_unres_var);
}
另请参见使用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中有效
  • 建议的
    {{member:type}
    语法可能与Django模板冲突
  • 多亏了Jonny Buchanan引用了
要记录对象数组,请使用括号作为JSDoc:


要删除WebStorm IDE上的警告,只需取消选中以下检查选项:

  • 未解析的Javascript函数
  • 未解析的Javascript变量
ps。这将删除IDE上的警告,但我认为这不是最好的主意,因为我们将失去像Webstorm这样的IDE中最好的实用程序之一,这可能会恶化代码的质量

即使如此,如果您想在菜单中执行以下操作:文件设置编辑器检查我们可以禁用Javascript警告

如下图所示:


对于一般情况,所有其他答案都不正确。如果没有将
数据
作为参数,该怎么办?那么您就没有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”是一个未解析的变量(字段)

一般的解决方案是添加
@命名空间
声明:

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

@hellboy快速回答:右键单击->使用Javascript库->确保选中HTML。接下来,通过查看项目设置中可用的javascript库来更好地了解发生了什么当函数是匿名函数时,您将如何执行该操作?如。那么(函数(数据){…})是否有类似的方法来定义全局变量?我在我的web应用程序中引用一个外部库,我需要使用诸如
MediumEditor
之类的东西,但intellij给了我一个臭名昭著的未解析变量警告。@borislemke:这个答案对不是参数的变量不起作用。一般的解决方案是。那些不是参数的变量呢?一般的解决办法是,埃琳娜在JetBrains论坛上的建议是一个好主意。一般的解决方案是。谢谢你的解决方案。我有许多从API返回的属性,因此使用您的技术,我想我需要列出其中的许多属性,以避免出现如下错误:``/**@namespace req.headers.signaturecertchainur/@namespace req.headers.signature/@namespace req.headers.slots/@namespace req.headers.nutrientslot**/``有没有办法创建更高级别的名称空间(例如,
req.headers
)并自动为其分配子名称空间?(很抱歉注释中没有格式!)为了帮助解决我遇到的一个复杂问题,如果您正在分解的变量有一个Eslint非法名称,如
my_var
,您可以将其重命名:
const{my_var:myVar}=data
function getData(data){
    const {member} = data;
    console.log(member);
}