Bagaimana saya bisa memberi tahu JSDoc tentang struktur suatu objek yang dikembalikan. Saya telah menemukan @return {{field1: type, field2: type, ...}} description
sintaks dan mencobanya:
/**
* Returns a coordinate from a given mouse or touch event
* @param {TouchEvent|MouseEvent|jQuery.Event} e
* A valid mouse or touch event or a jQuery event wrapping such an
* event.
* @param {string} [type="page"]
* A string representing the type of location that should be
* returned. Can be either "page", "client" or "screen".
* @return {{x: Number, y: Number}}
* The location of the event
*/
var getEventLocation = function(e, type) {
...
return {x: xLocation, y: yLocation};
}
Meskipun penguraian ini berhasil, dokumentasi yang dihasilkan hanya menyatakan:
Returns:
The location of an event
Type: Object
Saya sedang mengembangkan API dan membutuhkan orang untuk mengetahui tentang objek yang akan mereka dapatkan kembali. Apakah ini mungkin di JSDoc? Saya menggunakan JSDoc3.3.0-beta1.
javascript
documentation-generation
jsdoc
code-documentation
jsdoc3
Serigala hitam
sumber
sumber
@typedef
adalah solusi / solusi, tetapi tampaknya aneh jika ini tidak berfungsi dengan objek literal. Jika ada yang menemukan ini di masa mendatang (seperti yang saya lakukan), saya telah menambahkan masalah github.com/jsdoc/jsdoc/issues/1678 yang mungkin memiliki info lebih banyak daripada halaman ini.Jawaban:
Tentukan struktur Anda secara terpisah menggunakan @typdef :
/** * @typedef {Object} Point * @property {number} x - The X Coordinate * @property {number} y - The Y Coordinate */
Dan gunakan itu sebagai tipe pengembalian:
/** * Returns a coordinate from a given mouse or touch event * @param {TouchEvent|MouseEvent|jQuery.Event} e * A valid mouse or touch event or a jQuery event wrapping such an * event. * @param {string} [type="page"] * A string representing the type of location that should be * returned. Can be either "page", "client" or "screen". * @return {Point} * The location of the event */ var getEventLocation = function(e, type) { ... return {x: xLocation, y: yLocation}; }
sumber
@return
pernyataan memang berfungsi, tetapi mereka terdaftar dalam output seolah-olah itu adalah beberapa pengembalian (Satu status poinpoint - Object
dan kemudian dua poin peluru lainnya untukpoint.x - Number
danpoint.y - Number
). Sementara saya bisa hidup dengan itu, saya kira tidak ada cara untuk memiliki output kental dari objek yang dikembalikan? Atau setidaknya memiliki entripoint.x
danpoint.y
indentasi?@typedef
pendekatannya adalah yang paling jelas dalam hal keluaran dokumentasi, terima kasih!@inner
atau jenis definisi akan memilikiglobal
ruang lingkup dalam dokumentasi. +1@typedef {Object} Point
. Faktanya, menggunakan formulir dua baris ini menyorotiPoint
di PhpStorm dengan pesan "Variabel tidak terselesaikan atau jenis Titik". The@typedef
docs mendukung ini, tapi saya tidak ingin mengedit jawaban ini jika varian valid.Alternatif untuk saran yang sudah diposting, Anda dapat menggunakan format ini:
/** * Get the connection state. * * @returns {Object} connection The connection state. * @returns {boolean} connection.isConnected Whether the authenticated user is currently connected. * @returns {boolean} connection.isPending Whether the authenticated user's connection is currently pending. * @returns {Object} connection.error The error object if an error occurred. * @returns {string} connection.error.message The error message. * @returns {string} connection.error.stack The stack trace of the error. */ getConnection () { return { isConnected: true, isPending: false, error } }
yang akan memberikan keluaran dokumentasi berikut:
Get the connection state. getConnection(): Object Returns Object: connection The connection state. boolean: connection.isConnected Whether the authenticated user is currently connected. boolean: connection.isPending Whether the authenticated users connection is currently pending. Object: connection.error The error object if an error occurred. string: connection.error.message The error message. string: connection.error.stack The stack trace of the error.
sumber
Solusi bersih adalah menulis kelas dan mengembalikannya.
/** * @class Point * @type {Object} * @property {number} x The X-coordinate. * @property {number} y The Y-coordinate. */ function Point(x, y) { return { x: x, y: y }; } /** * @returns {Point} The location of the event. */ var getEventLocation = function(e, type) { ... return new Point(x, y); };
sumber
Point
bukan konstruktor, untuk mengubahnya menggantikan tubuhPoint
fungsi denganthis.x = x; this.y = y;
new
sintaksnya adalah membuat sebuah instance dariconstructor
. Tanpanew
, konteksthis
akan menjadi konteks global. Anda dapat mencoba membuat sebuah instance tanpanew
melihat efeknya.