如何描述传递的匿名函数的参数?
How to describe parameters of passed anonymous function?
我想用 JSDoc 描述 curVal
?
我在 arrays.every()
之前和匿名回调中尝试了 @param
,但它对 PhpStorm
解析方法没有帮助。
/**
* @param {Array} curVal
*/
arrays.every(function (curVal) {
/**
* @param {Array} curVal
*/
curVal.???
});
为了方便起见,我需要它,我只想轻松访问对象 curVal
上的 IDE 自动完成 Array.prototype
方法
我认为最好(也是最清晰)的选择是给函数起一个名字,例如
/**
* @type {Number[]}
*/
var array = [ 1, 2, 3 ];
/**
* @param {Number} curVal
*/
var fn = function (curVal) {
// operate on curVal
};
array.forEach(fn);
我认为你应该(也许必须)指定数组类型,就像在我的示例中一样,而不仅仅是 {Array}
,我不知道你所说的 arrays.every
是什么意思,但是我假设您打算使用 Array 对象中的 .forEach
。
[编辑]
好的,现在我明白了,也许你想要的是这样的:
/**
* @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 集成)
我不知道 PhpStorm 有多聪明 (the docs say it recognizes 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();
我想用 JSDoc 描述 curVal
?
我在 arrays.every()
之前和匿名回调中尝试了 @param
,但它对 PhpStorm
解析方法没有帮助。
/**
* @param {Array} curVal
*/
arrays.every(function (curVal) {
/**
* @param {Array} curVal
*/
curVal.???
});
为了方便起见,我需要它,我只想轻松访问对象 curVal
Array.prototype
方法
我认为最好(也是最清晰)的选择是给函数起一个名字,例如
/**
* @type {Number[]}
*/
var array = [ 1, 2, 3 ];
/**
* @param {Number} curVal
*/
var fn = function (curVal) {
// operate on curVal
};
array.forEach(fn);
我认为你应该(也许必须)指定数组类型,就像在我的示例中一样,而不仅仅是 {Array}
,我不知道你所说的 arrays.every
是什么意思,但是我假设您打算使用 Array 对象中的 .forEach
。
[编辑]
好的,现在我明白了,也许你想要的是这样的:
/**
* @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 集成)
我不知道 PhpStorm 有多聪明 (the docs say it recognizes 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();