Как указать, что параметр необязателен при использовании встроенного JSDoc? - PullRequest
94 голосов
/ 03 мая 2011

Согласно вики JSDoc для @ param вы можете указать, что @param необязателен, используя

/**
    @param {String} [name]
*/
function getPerson(name) {
}

, и вы можете указать параметр inline , используя

function getPerson(/**String*/ name) {
}

И я могу объединить их, как показано ниже, что работает нормально.

/**
    @param [name]
*/
function getPerson(/**String*/name) {
}

Но я хотел бы знать, есть ли способ сделать все это встроенным, если это возможно.

Ответы [ 4 ]

90 голосов
/ 04 апреля 2015

Из официальной документации :

Необязательный параметр

Необязательный параметр с именем foo.

@param {number} [foo]
// or:
@param {number=} foo

Необязательный параметр foo со значением по умолчанию 1.

@param {number} [foo=1]
60 голосов
/ 19 апреля 2013

После некоторых раскопок я обнаружил, что с ними все в порядке

/**
 * @param {MyClass|undefined}
 * @param {MyClass=}
 * @param {String} [accessLevel="author"] The user accessLevel is optional.
 * @param {String} [accessLevel] The user accessLevel is optional.
 */

Чуть визуально привлекательнее, чем function test(/**String=*/arg) {}

46 голосов
/ 15 мая 2011

Я нашел способ сделать это, используя Google Closure Compiler выражения типа .Вы ставите знак равенства после типа следующим образом: function test(/**String=*/arg) {}

0 голосов
/ 11 июля 2019

Если вы используете комментарии встроенного типа к аргументам функции и задаетесь вопросом, как пометить аргумент функции как необязательный в этой записи, я обнаружил, что просто присваивает значения по умолчанию дополнительным аргументам. Если вы хотите, чтобы значением по умолчанию было undefined, вы также должны установить его явно, в противном случае аргумент не будет помечен как необязательный (даже если ему предшествуют уже необязательные аргументы):

function demo(
  /** @type {String} */ mandatory,
  /** @type {Number} */ optional1 = 0,
  /** @type {Number} optional2 = undefined,
)

Если вы наведите курсор мыши на demo в вашей IDE, вы должны увидеть, как optional1 и optional2 отображаются как дополнительные. В VSCode это обозначено ? после имени аргумента (нотация TypeScript). Если вы удалите = undefined из optional2, вы увидите, что только optional1 является необязательным, что, конечно, бессмысленно, поэтому значение по умолчанию здесь должно быть явным, как я упоминал в предыдущем абзаце.

...