Discord.JS v13的Message collector类型不匹配报错如何修复?
问题解决方法
错误根因
你定义的filter函数没有返回布尔值:箭头函数用花括号包裹逻辑时,没有显式添加return语句的情况下,函数默认返回void,而discord.js的消息收集器要求filter函数必须返回boolean或Promise<boolean>类型的结果,用来判断当前消息是否符合收集规则,因此触发了类型报错。
修复方案
有两种等价的修改方式,选任意一种即可:
方案1:使用箭头函数隐式返回
去掉filter函数逻辑外的花括号,箭头函数会自动将表达式的结果作为返回值:
const filter = (m: Message) => m.author.id === message.author.id
方案2:显式添加return语句
如果要保留花括号写法,手动添加return返回判断结果:
const filter = (m: Message) => { return m.author.id === message.author.id }
补充说明
修改前代码运行不会崩溃的原因是:void类型的返回值在运行时会被判定为false,导致所有消息都无法通过filter校验,收集器永远不会触发collect事件,直到计时结束后触发end事件返回收集到的消息数量为0,因此只会出现功能不生效的表现,不会抛运行时异常。
内容的提问来源于stack exchange,提问作者PrezOfTheUnitedIdiots
相关产品推荐
相关产品推荐

