如何在JSDoc中引用其他模块类型作为返回/参数类型
在JSDoc中引用外部模块类型的正确方法
嘿,针对你在JSDoc里引用discord.js模块类型的需求,这里有几种靠谱的实现方式:
方法1:直接在类型注解中使用import()语法
这是最直接的方式,不需要提前定义类型,适合单次使用的场景。你可以直接在@returns或@param的类型里用import('模块名').类型名来引用外部模块的类型。
修改你的代码示例如下:
const Discord = require("discord.js"); /** * 返回一个带有机器人默认设置的空嵌入消息 * @param {import('discord.js').User} u - 执行该命令的用户 * @returns {import('discord.js').RichEmbed} */ exports.getDefaultEmbed = function(u) { let embed = new Discord.RichEmbed(); embed.setColor(0xFA632A); if (u) embed.setFooter(u.tag, u.displayAvatarURL); return embed; };
方法2:提前定义类型别名(适合多次复用)
如果你的代码里需要多次引用同一个外部类型,可以先用@typedef定义一个别名,之后直接使用别名即可,让代码更简洁:
const Discord = require("discord.js"); /** @typedef {import('discord.js').User} DiscordUser */ /** @typedef {import('discord.js').RichEmbed} DiscordRichEmbed */ /** * 返回一个带有机器人默认设置的空嵌入消息 * @param {DiscordUser} u - 执行该命令的用户 * @returns {DiscordRichEmbed} */ exports.getDefaultEmbed = function(u) { let embed = new Discord.RichEmbed(); embed.setColor(0xFA632A); if (u) embed.setFooter(u.tag, u.displayAvatarURL); return embed; };
补充说明
- 这种
import()的语法是JSDoc官方支持的模块类型引用方式,能正确识别外部npm包导出的类型定义。 - 由于discord.js本身提供了完善的TypeScript类型声明,这种写法还能让VS Code这类编辑器给你提供更精准的代码提示和类型校验。
内容的提问来源于stack exchange,提问作者Pedro Fracassi
相关产品推荐
相关产品推荐

