TypeScript开发Discord V13机器人出现Object is possibly 'undefined'报错求助
问题原因
Array.shift() 方法的返回类型本身就包含 undefined :当数组为空时调用该方法就会返回undefined。
即使你前面加了消息必须以!开头的判断,也存在边界情况:比如用户只发送!、或者只发送!加一串空格,此时Message.content.slice(Prefix.length).split(/ +/)得到的数组无法保证第一个元素一定是非空有效值,TypeScript无法确定Args.shift()一定有值,因此抛出类型错误。
修复方案
你可以根据需求选择以下两种方案:
方案1:加非空断言(快速解决,适合确定此处一定有值的场景)
如果你能明确经过前面的逻辑过滤后,Args.shift()必然有值,可以直接加!非空断言,告知TypeScript跳过此处的空值校验:const Command = Args.shift()!.toLowerCase()方案2:加空值兜底判断(更稳妥,推荐新手使用)
额外加一层空值校验,过滤掉无效指令的情况,避免运行时出现报错:Client.on("messageCreate", (Message) => { if(!Message.content.startsWith(Prefix) || Message.author.bot) return; const Args = Message.content.slice(Prefix.length).split(/ +/) const Command = Args.shift() // 空值直接返回,不继续执行后续逻辑 if (!Command) return const lowerCommand = Command.toLowerCase() switch (lowerCommand) { case "ping": Message.reply("pong") break; } })
额外提示:Discord.js v13版本要求接收用户消息必须在Discord开发者后台开启Message Content Intent权限,否则messageCreate事件无法正常触发。
内容的提问来源于stack exchange,提问作者Nestan
相关产品推荐
相关产品推荐

