PhpStorm 警告:参数类型不可分配给参数类型

Posted

技术标签:

【中文标题】PhpStorm 警告:参数类型不可分配给参数类型【英文标题】:PhpStorm warning: argument type not assignable to parameter type 【发布时间】:2016-08-10 18:53:00 【问题描述】:

我在我的项目中的 phpStorm 中的 javascript 文件中看到一个警告,我想做一些事情。我有这样的代码:

function someFunction() 
    ...
    var myArray = [1, 2, 3, ...];
    $.each(myArray, function()  someOtherFunction(this); );  //warning on this line
    ....


/**
 * @param Number value
 */
function someOtherFunction(value) 
    ...

在代码中指出的那一行,PHP 给了我这个警告:

参数类型 someFunction 不能分配给参数类型 Number

我确实理解它的含义以及发出此警告的原因:PhpStorm 无法知道 jQuery 在 .each 循环回调中重新定义了 this 上下文。我的问题是我能做些什么来暗示这种重新定义正在发生,this 在这种情况下到底是什么?

【问题讨论】:

【参考方案1】:
function someFunction() 
    ...
    var myArray = [1, 2, 3, ...];
    $.each(myArray, function(i, val)  someOtherFunction(val); );  //warning on this line
    ....

http://api.jquery.com/jquery.each/ 此处的 jQuery 文档显示回调函数的参数是实际处理值的内容。传递的第一个参数是数组索引,第二个传递的是值,这就是您要查找的值。

问题是this 永远不会只是一个原始值。 jQuery 总是把它包装成一个对象。

【讨论】:

jQuery 总是将其包装为一个对象 - 没错,但我的代码确实按预期工作。 @AleksG 哦,我确定确实如此,但问题是 PHPStorm 需要一个原始数字(或者可能是一个数字对象),而不是一个持有数字的对象。嗯,尽管试试这个。这是一个完全的猜测,但是如果你执行 someOtherFunction(+this); 会发生什么?

以上是关于PhpStorm 警告:参数类型不可分配给参数类型的主要内容,如果未能解决你的问题,请参考以下文章

“header:Header;”类型的参数不可分配给“RequestOptionsArgs”类型的参数

构建:'string | 类型的参数1' 不可分配给“字符串”类型的参数

构建:'string | 类型的参数1' 不可分配给“字符串”类型的参数

JWT:'string | 类型的参数undefined' 不可分配给'Secret' 类型的参数

类型参数 static: boolean; 不可分配给 read?: any 类型的参数

如何解决“null”类型的参数不可分配给“GoogleUser |”类型的参数不明确的'