Discord.js斜杠命令注册报错50035:name字段必填问题排查
故障原因
报错DiscordAPIError[50035]: Invalid Form Body且提示name[BASE_TYPE_REQUIRED]字段缺失,核心问题出在部署脚本的命令收集逻辑,和help.ts的命令定义本身无关:
- 你在
deploy-commands.ts中向commands数组压入的是整个命令模块对象(包含data、execute两个属性),但Discord注册接口要求数组元素直接是斜杠命令的定义结构,需要读取每个元素顶层的name、description等字段。你提交的对象顶层没有这些字段(字段都嵌套在data属性下),接口校验自然不通过。 - 额外注意:
SlashCommandBuilder生成的是类实例对象,不能直接传给接口,需要调用toJSON()方法转换为接口可识别的纯JSON结构。
修复方案
只需要修改deploy-commands.ts中的命令收集逻辑,同时补全正确的TypeScript类型定义即可:
- 修正Command类型定义,替换原有错误的类型声明:
import { SlashCommandBuilder, CommandInteraction, Client } from 'discord.js'; type Command = { data: SlashCommandBuilder; execute: (interaction: CommandInteraction, client: Client) => Promise<void>; };
- 修改循环收集命令的逻辑,压入序列化后的命令定义数据,替换原有错误的push逻辑:
const commands = []; for (const module of Object.values<Command>(commandModules)) { // 只传入命令的data部分,且序列化为API支持的JSON格式 commands.push(module.data.toJSON()); }
修改完成后重新运行deploy-commands.ts,即可正常完成所有斜杠命令的注册,不会再触发格式错误。
内容的提问来源于stack exchange,提问作者Pratham
相关产品推荐
相关产品推荐

