【问题标题】:PhpStorm warning: argument type not assignable to parameter typePhpStorm 警告:参数类型不可分配给参数类型
【发布时间】: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 在这种情况下到底是什么?

【问题讨论】:

    标签: javascript jquery this phpstorm each


    【解决方案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); 会发生什么?
    猜你喜欢
    • 2020-02-24
    • 2019-06-24
    • 2021-06-14
    • 2018-08-10
    • 2021-10-17
    • 1970-01-01
    • 2021-02-03
    • 2020-03-26
    相关资源
    最近更新 更多