使用TypeScript开发Discord Bot:discord.js是否有内置命令选项类型?
问题解答
discord.js 确实提供了现成的内置类型来替代你手动定义的接口,无需重复造轮子:
1. 替代 ICommandOption 的内置类型
你的 ICommandOption 完全可以用 discord.js 内置的 ApplicationCommandOptionData 类型替代。这个类型已经包含了 name、description、required、type 这些必填字段,还支持 choices、autocomplete 等更多可选字段,完全覆盖你的需求。
2. 扩展内置类型实现 ICommand
你的 ICommand 包含两部分:Discord 命令的基础元数据(name、description、options),以及你自定义的字段(devOnly、testOnly 等)。discord.js 没有完全包含这些自定义字段的现成类型,但你可以通过扩展内置类型来实现,避免重复定义基础字段:
首先导入所需类型:
import { ApplicationCommandData, ApplicationCommandOptionData, Client, CommandInteraction } from 'discord.js';
然后修改你的 ICommand 接口:
export default interface ICommand extends ApplicationCommandData { devOnly: boolean; testOnly: boolean; permissionsRequired?: bigint[]; // 也可以换成 PermissionResolvable[] 更符合discord.js规范 deleted?: boolean; callback: (client: Client, interaction: CommandInteraction) => void; }
ApplicationCommandData 已经内置了 name、description、options(类型为 ApplicationCommandOptionData[])等字段,你只需要添加自己的自定义字段即可,既利用了官方类型的完整性,又保留了你的业务逻辑需求。
补充说明
ApplicationCommandData是 discord.js 为应用命令(包括 slash 命令)提供的标准类型,完全对齐 Discord API 的参数要求,比手动定义的接口更严谨。- 如果需要构建命令实例,还可以使用
SlashCommandBuilder类,它的链式调用方法会自动推导类型,和ApplicationCommandData是兼容的。
内容的提问来源于stack exchange,提问作者Toriacx
相关产品推荐
相关产品推荐

