Bagaimana cara menunjukkan param adalah opsional menggunakan JSDoc sebaris?

119

Menurut wiki JSDoc untuk @param Anda dapat menunjukkan bahwa @param bersifat opsional

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

dan Anda dapat menunjukkan parameter sebaris menggunakan

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

Dan saya bisa menggabungkannya seperti berikut, yang berfungsi dengan baik.

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

Tapi saya ingin tahu apakah ada cara untuk melakukan semuanya secara inline jika memungkinkan.

studgeek
sumber

Jawaban:

123

Dari dokumentasi resmi :

Parameter opsional

Parameter opsional bernama foo.

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

Parameter opsional foo dengan nilai default 1.

@param {number} [foo=1]
czerny.dll
sumber
7
Saya bertanya bagaimana melakukannya secara inline. Contoh yang Anda berikan tampaknya sama dengan yang saya tunjukkan dalam pertanyaan saya.
studgeek
67

Setelah beberapa penggalian, saya menemukan ini baik-baik saja

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

Sedikit lebih menarik secara visual daripada function test(/**String=*/arg) {}

vvMINOvv
sumber
9
Itu valid (dan didokumentasikan dalam bantuan JSDoc), tetapi mereka tidak sebaris - itulah yang saya cari.
studgeek
Pertanyaannya adalah tentang notasi JSDoc sebaris. Ini adalah informasi yang menarik, tetapi tidak menjawab pertanyaan
Ken Bellows
51

Saya menemukan cara untuk melakukan ini menggunakan ekspresi jenis Google Closure Compiler . Anda memberi tanda sama dengan setelah tipe seperti ini: function test(/**String=*/arg) {}

studgeek
sumber
10
WebStorm / IntellIDEA mendukung notasi ini
Peter Aron Zentai
3
Ya, jadi saya pikir itu cukup diterima untuk menandainya sebagai jawaban.
studgeek
4
@PeterAronZentai, saya akan menambahkan WebStorm / IntelliIDEA mendukungnya sebagai hasil dari saya memasukkan permintaan fitur untuk itu :). Mereka sekarang mendukung mayoritas ekspresi tipe Google Closure Compiler yang bagus.
studgeek
1
Tidak berfungsi untuk saya untuk parameter kedua opsional.
DaveWalley
1
tolong perbaiki tautannya; itu mengarah ke halaman 404
chharvey
3

Jika Anda menggunakan komentar tipe sebaris pada argumen fungsi dan bertanya-tanya bagaimana cara menandai argumen fungsi sebagai opsional dalam notasi itu, saya menemukan bahwa hanya menetapkan nilai default ke argumen opsional berhasil. Jika Anda ingin default menjadi, undefinedAnda harus mengaturnya secara eksplisit juga, jika tidak, argumen tidak akan ditandai sebagai opsional (bahkan jika didahului oleh argumen opsional):

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

Jika Anda mengarahkan kursor ke demoIDE Anda, Anda akan melihat keduanya optional1dan optional2muncul sebagai opsional sekarang. Dalam VSCode yang ditunjukkan dengan? nama argumen (notasi TypeScript). Jika Anda menghapus = undefineddari optional2Anda akan melihat hanya optional1menjadi opsional yang tentu saja tidak masuk akal sehingga nilai default di sini harus eksplisit seperti yang saya singgung di paragraf di atas.

Tomáš Hübelbauer
sumber