You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 10:40:59