jsdoc-将文档重用于多个功能吗?

And*_*dyO 6 jsdoc jsdoc3

我有一个带有大量选项的函数:

/**
 * Show dialog in a blocking manner.
 *
 * @param {object} opts
 * @param {string} opts.msg "Body" of the dialog.
 * @param {number} opts.timeout Seconds - floating point values are rounded. (ActiveX imposes this)
 * @param {string} opts.title Title of the dialog.
 * @param {number} opts.icon Use constants for this. (See docs)
 * @param {number} opts.buttons Use constants for this. (See docs)
 * @param {number} opts.defaultButton Use constants for this. (See docs)
 * @returns {number} Use our constants to check for what the user chose.
 */
const showSync = (opts) => {
...
}
Run Code Online (Sandbox Code Playgroud)

但我也有该功能的非阻塞版本,显然需要相同的选项并返回Promise。复制/粘贴文档似乎很脏,因为这会降低可维护性和意外不一致的可能性。

因此,很棒的是类似以下内容:

/**
 * Shows dialog in a non-blocking manner.
 *
 * @inheritdoc showSync
 * @returns {Promise<number>} Use our constants to check for what the user chose.
 */
const show = (opts) => {
...
}
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

[更新]

这不是JSDoc用于重用的Function接口的副本,因为该问题仅是关于重用相同的定义,而这个问题是关于重用但也部分覆盖了该定义。因此,那里的答案在这里没有回答问题。

Jos*_*ady 6

我认为用 jsdoc 做到这一点的最好方法是这样的:

/**
 * Options for showing a dialog.
 * @typedef {Object} ShowOptions
 * @property {string} msg "Body" of the dialog.
 * @property {number} timeout Seconds - floating point values are rounded. (ActiveX imposes this)
 * @property {string} title Title of the dialog.
 * @property {number} icon Use constants for this. (See docs)
 * @property {number} buttons Use constants for this. (See docs)
 * @property {number} defaultButton Use constants for this. (See docs)
 */

/**
 * Show dialog in a blocking manner.
 *
 * @param {ShowOptions} opts
 * @returns {number} Use our constants to check for what the user chose.
 */
const showSync = (opts) => {...}

/**
 * Shows dialog in a non-blocking manner.
 *
 * @param {ShowOptions} opts
 * @returns {Promise<number>} Use our constants to check for what the user chose.
 */
const show = (opts) => {...}
Run Code Online (Sandbox Code Playgroud)

您可以更进一步,并将类似的概念也应用于返回值:

/**
 * Use our constants to check for what the user chose.
 * @typedef {number} ShowResult 
 */

/**
 * Show dialog in a blocking manner.
 *
 * @param {ShowOptions} opts
 * @returns {ShowResult} 
 */
const showSync = (opts) => {...}

/**
 * Shows dialog in a non-blocking manner.
 *
 * @param {ShowOptions} opts
 * @returns {Promise<ShowResult>}
 */
const show = (opts) => {...}
Run Code Online (Sandbox Code Playgroud)