JSDoc用于重用的Function接口

时间:2019-03-10 09:02:30

标签: javascript typescript typescript-typings jsdoc jsdoc3

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

在使用@typedef或类似的功能时是否存在有效的JSDoc语法,而不是在每个函数上方声明@params@returns,而仅描述类型?< / strong>

...未禁用ESLint的require-jsdoc

的奖励点

1 个答案:

答案 0 :(得分:3)

有一种定义方法。使用@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被解释为函数的返回类型,而不是整个函数定义。因此,以下内容将无法正常工作。

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

您可以使其与以下各项一起使用,但这不是一个很好的解决方案。我仍在寻找更好的解决方案。

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

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

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

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