Подтвердить что ты не робот

Правильный способ документирования открытых аргументов в JSDoc

Скажем, у вас есть что-то вроде следующего:

var someFunc = function() {
    // do something here with arguments
}

Как вы правильно документируете, что эта функция может принимать любое количество аргументов в JSDoc? Это мое лучшее предположение, но я не уверен, что это правильно.

/**
 * @param {Mixed} [...] Unlimited amount of optional parameters
 */
var someFunc = function() {
    // do something here with arguments
}

Относится к: php - Как документировать переменное количество параметров

4b9b3361

Ответ 1

спецификации JSDoc и Google Closure Compiler делают это следующим образом:

@param {...number} var_args

Где "число" - это тип ожидаемых аргументов.

Таким образом, полное использование этого будет выглядеть следующим образом:

/**
* @param {...*} var_args
*/
function lookMaImVariadic(var_args) {
    // Utilize the `arguments` object here, not `var_args`.
}

Обратите внимание на комментарий об использовании arguments (или некоторого смещения arguments) для доступа к вашим дополнительным аргументам. var_args он просто используется для подачи сигнала в вашу среду IDE, что аргумент действительно существует.

Параметры останова в ES6 могут принимать реальный параметр на один шаг дальше, чтобы охватить предоставленные значения (поэтому больше не нужно использовать arguments)

/**
* @param {...*} var_args
*/
function lookMaImES6Variadic(...var_args) {
    // Utilize the `var_args` array here, not `arguments`.
}

Ответ 2

Как это сделать, теперь описано в документации JSDoc, и он использует эллипсис, например, документы Closure.

@param {...<type>} <argName> <Argument description>

Вам нужно указать тип, который следует использовать после многоточия, но вы можете использовать * для описания принятия чего-либо или использовать | для разделения нескольких приемлемых типов. В сгенерированной документации JSDoc будет описывать этот аргумент как повторяемый, таким же образом он описывает необязательные аргументы как необязательные.

В моем тестировании не было необходимости иметь аргумент в определении фактической функции javascript, поэтому ваш фактический код может иметь только пустые круглые скобки, т.е. function whatever() { ... }.

Единый тип:

@param {...number} terms Terms to multiply together

Любой тип (в приведенном ниже примере квадратные скобки означают items, будут отмечены как необязательные, так и повторяемые):

@param {...*} [items] - zero or more items to log.

Многим типам нужны скобки вокруг списка типов с эллипсисом перед открытием:

@param {...(Person|string)} attendees - Meeting attendees, listed as either 
                                        String names or {@link Person} objects

Ответ 3

Я долгое время работал с этим. Вот как это сделать с помощью Google Closure Compiler:

/**
* @param {...*} var_args
*/
function my_function(var_args) {
    // code that accesses the magic 'arguments' variable...
}

Ключ должен дать вашей функции параметр var_args (или то, что вы называете его в инструкции @param), даже если функция фактически не использует этот параметр.

Ответ 4

Из группы пользователей JSDoc:

Нет официального пути, но одно из возможных решений:

/**
 * @param [...] Zero or more child nodes. If zero then ... otherwise ....
 */

Квадратные скобки указывают необязательный параметр, и... будет (для меня) указывать "какое-то произвольное число".

Другая возможность - это...

/**
 * @param [arguments] The child nodes.
 */

В любом случае вы должны сообщить, что вы имеете в виду.

Это немного устарело, хотя (2007), но я не знаю ничего более текущего.

Если вам нужно документировать тип параметра как "смешанный", используйте {*}, как в @param {*} [arguments].