Як вказати парам необов'язково, використовуючи вбудований JSDoc?


119

Згідно з JSDoc вікі для @param, ви можете вказати, що @param є необов'язковим, використовуючи

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

і ви можете вказати параметр, вбудований в параметр, використовуючи

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

І я можу поєднати їх, як наступне, що добре працює.

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

Але я хотів би знати, чи є спосіб зробити це все в порядку, якщо це можливо.

Відповіді:


123

З офіційної документації :

Необов’язковий параметр

Необов’язковий параметр з ім'ям foo.

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

Необов’язковий параметр foo зі значенням за замовчуванням 1.

@param {number} [foo=1]

7
Я запитував, як це зробити в Інтернеті. Приклад, який ви надаєте, схожий на те, що я показав у своєму запитанні.
studgeek

67

Після деякого копання я виявив, що це також добре

/**
 * @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) {}


9
Вони є дійсними (і задокументовані в довідці JSDoc), але вони не вбудовані - саме це я і шукав.
studgeek

Питання стосується вбудованої нотації JSDoc. Це цікава інформація, але не відповідає на запитання
Кен Беллоуз

51

Я знайшов спосіб це зробити, використовуючи вирази типу Google Closure Compiler . Ви ставите знак рівності після типу типу: function test(/**String=*/arg) {}


10
WebStorm / IntellIDEA підтримує цю нотацію
Пітер Арон Зентай

3
Так, тому я думаю, що його отримали достатньо прийняття, щоб позначити це як відповідь.
studgeek

4
@PeterAronZentai, я додаю, що WebStorm / IntelliIDEA підтримує це, як результат, коли я додаю для нього запит на функцію :). Зараз вони підтримують більшість виразів типу Google Closure Compiler, що чудово.
studgeek

1
Не працює для мене додатковий другий параметр.
DaveWalley

1
будь ласка, виправте посилання; це призводить до сторінки 404
chharvey

3

Якщо ви використовуєте вбудовані коментарі до аргументів функції і вам цікаво, як позначити аргумент функції як необов'язковий у цій нотації, я виявив, що просто присвоєння значень за замовчуванням необов'язкові аргументи працювали. Якщо ви хочете бути типовим, undefinedвам слід встановити це явно, інакше аргумент не буде позначений як необов'язковий (навіть якщо йому передують вже необов’язкові аргументи):

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

Якщо ви наведіть курсор миші на demoIDE, ви маєте побачити обидва optional1та optional2відображатись як необов’язкові зараз. У VSCode, який позначається ?після імені аргументу (позначення TypeScript). Якщо ви видалите = undefinedз нього, optional2ви побачите лише optional1необов’язковість, що, звичайно, є нісенітницею, тому значення за замовчуванням тут повинно бути явним, як я нагадав у наведеному вище абзаці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.