【问题标题】:How to describe parameters of passed anonymous function?如何描述传递的匿名函数的参数?
【发布时间】:2017-07-15 00:49:00
【问题描述】:

我想用JSDoc描述curVal

我在arrays.every() 之前和匿名回调内部尝试过@param,但它对PhpStorm 解析方法没有帮助。

/**
 * @param {Array} curVal
 */
arrays.every(function (curVal) {
    /**
     * @param {Array} curVal
     */     
    curVal.???
});

我需要它是为了方便,我只想在 IDE 的自动补全 Array.prototype 对象 curVal 方法中轻松访问

【问题讨论】:

    标签: javascript phpstorm anonymous-function jsdoc


    【解决方案1】:

    我不知道 PhpStorm 有多聪明(the docs 说它可以识别 Closure Compiler tags and type annotations),但我可以想到两种可能的解决方案。

    首先是直接告诉它函数参数的类型:

    arrays.every(/** @param {Array} curVal */ function (curVal) {
      // ...
    });
    

    或者(闭包编译器内联样式):

    arrays.every(function (/** Array */ curVal) {
      // ...
    });
    

    其次,这只有在 PhpStorm 足够聪明地知道 Array.prototype.every 的回调如何获取其参数时才有效,即确保它知道 arrays 是一个数组数组:

    /** @type {Array.<Array>} */
    var arrays = getArrays();
    

    或者:

    var arrays = /** Array.<Array> */ getArrays();
    

    【讨论】:

    • 这太棒了,我尝试了你所有的建议,我第一次和第二次都完美无缺。我需要仔细检查,因为 PhpStorm 似乎有某种缓存,当我删除第一个类型注释时,IDE 记得它是 Array。然后我将其更改为 Object,然后再次将第二个选项更改为 Array。谢谢!
    【解决方案2】:

    我认为你最好的(也是最清晰的)选择是给函数一个名字,例如

    /**
     * @type {Number[]}
     */
    var array = [ 1, 2, 3 ];
    
    /**
     * @param {Number} curVal
     */
    var fn = function (curVal) {
        // operate on curVal
    };
    array.forEach(fn);
    

    我认为您应该(也许必须)指定数组类型,就像在我的示例中一样,而不仅仅是 {Array},而且我不知道您所说的 arrays.every 是什么意思,但我假设您打算使用.forEach 来自 Array 对象。

    [编辑]

    好的,现在我明白了,也许你想要的是这样的:

    /**
     * @param {Array} curVal
     */
    var fn = function (curVal) {
        curVal. // press Ctrl-Space here, and autocompletion will work
    };
    

    但是,如果您真的想将 jsdoc 与匿名函数一起使用,则可以使用类似这样的方法(并且最接近您问题中的代码):

    var arrayOfArrays = [[1,2,3], [2,3,4]]
    arrayOfArrays.every(/** @param {Array} curVal */function (curVal) {
        curVal. // press Ctrl-Space here, and autocompletion will work
    });
    

    (我使用 JetBrains 的 IntelliJ,而不是他们的 PhpStorm IDE,但它们共享相同的 Javascript 集成)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多