Как описать параметры передаваемой анонимной функции?
Я хочу описать curVal
с JSDoc?
Я старался @param
как раз перед arrays.every()
и внутри анонимного обратного вызова, но это не помогло PhpStorm
разрешать методы.
/**
* @param {Array} curVal
*/
arrays.every(function (curVal) {
/**
* @param {Array} curVal
*/
curVal.???
});
Мне это нужно для удобства, я просто хочу легко получить доступ в автозаполнении IDE Array.prototype
методы на объекте curVal
2 ответа
Я не знаю, насколько умен PhpStorm ( в документах говорится, что он распознает теги компилятора Closure и аннотации типов), но я могу придумать два возможных решения.
Во-первых, нужно прямо сказать тип функции param:
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();
Я думаю, что ваш лучший (и наиболее разборчивый) вариант - дать функции имя, например
/**
* @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
});
(Я использую IntelliJ JetBrains, а не их IDE PhpStorm, но они используют ту же интеграцию Javascript)