我正在连接多个电子邮件工具,并将它们的API抽象为一个通用的sendEmail
函数,每个服务具有相同的params
和相同的returns
。这意味着对于每个电子邮件服务(Mailchimp,SendGrid ...),我必须编写一个具有相同JSDoc的函数,该函数描述相同的@params
和相同的@returns
...
在使用@typedef
或类似的功能时是否存在有效的JSDoc语法,而不是在每个函数上方声明@params
和@returns
,而仅描述类型?< / strong>
...未禁用ESLint的require-jsdoc
答案 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) { ... })
到目前为止,这是我最喜欢的解决方案,它允许您使用适当的变量声明关键字。唯一的缺点是它要求您记住添加并非严格必要的代码。