重用函数接口的 JSDoc

JSDoc for reused Function interface

我连接到多个电子邮件工具并将它们的 API 抽象为一个通用 sendEmail 函数,每个服务具有相同的 params 和相同的 returns。这意味着对于每个电子邮件服务(Mailchimp、SendGrid...),我必须编写一个函数,该函数具有相同的 JSDoc,描述相同的 @params 和相同的 @returns...

是否有有效的 JSDoc 语法来使用 @typedef 或类似函数,而不是在每个函数上方声明 @params@returns,只需描述类型?

...不禁用 ESLint 的奖励积分 require-jsdoc

有一种方法可以定义它。使用 @callback 相当于 @typedef 的功能。

/**
 * @callback sendEmail
 * @param {string} to
 * @param {string} body
 * @returns {boolean} to indicate success or failure
 */

然后您可以使用 sendEmail 作为类型:

/**
 * @param {sendEmail} sender - function to send the email
 */
function createEmailService(sender) { ... }

问题是没有指定函数类型的好方法,因为函数上的 @type 被解释为函数的 return 类型,而不是整个函数定义.所以像下面这样的东西不起作用。

/**
 * @type {sendEmail}
 */
function mailchimpEmailSender(to, body) { ... }

您可以让它与以下内容一起使用,但这不是一个很好的解决方案。我还在寻找更好的解决方案。

/**
 * @type {sendEmail}
 */
let mailchimpEmailSender
mailchimpEmailSender = function(to, body) { ... }

更新: 我发现如果将函数声明包装在括号中,它似乎允许 @type 应用于变量而不是函数声明。

/**
 * @type {sendEmail}
 */
const mailchimpEmailSender = (function(to, body) { ... })

到目前为止,这是我最喜欢的解决方案,因为它允许您使用适当的变量声明关键字。唯一的缺点是它要求您记住添加并非绝对必要的代码。