TypeScript编译报错:EventEmitter类型未识别问题求助
TypeScript 5.5.x下Mongoose Connection、Discord.js Collector无法识别EventEmitter方法的问题解决
问题描述
使用TypeScript开发Discord机器人时,升级TS版本到5.5.3(此前为5.3.3)后出现类型编译错误:discord.js的client对象可正常识别EventEmitter相关方法,但mongoose的connection、discord.js的InteractionCollector均无法通过编译,报错提示on、emit等属性不存在于对应类型上。将TS版本降级至5.4.x后编译恢复正常。
具体报错信息
Property 'on' does not exist on type 'Connection'. Did you mean to access the static member 'Connection.on' instead? 22 connection.on(event, callback); ~~
error TS2339: Property 'emit' does not exist on type 'InteractionCollector<ButtonInteraction<CacheType>>'. 38 end(interaction, orderlist, () => collector.emit('end')); ~~~~
Property 'emit' does not exist on type 'InteractionCollector<StringSelectMenuInteraction<CacheType> | UserSelectMenuInteraction<CacheType> | RoleSelectMenuInteraction<CacheType> | MentionableSelectMenuInteraction<...> | ChannelSelectMenuInteraction<...> | ButtonInteraction<...>>'. 153 collector.emit('end'); ~~~~
已尝试的无效操作
- 更新所有依赖包
- 单独安装
@types/node - 彻底删除并重新安装
node_modules - 更换MacBook设备测试
问题根源与解决方案
该问题源于TypeScript 5.5.x对EventEmitter混合类型(mixin)的类型检查逻辑变更——新版本对类型推断的严格性提升,导致discord.js v14、mongoose v8等库的旧类型定义无法被正确识别。
临时解决办法(已验证有效)
直接将TypeScript版本降级到5.4.x系列:
npm install typescript@~5.4.0 --save-dev
长期适配方案
- 等待库类型定义更新:关注discord.js和mongoose的官方迭代,待其完成TS 5.5适配后再升级TS版本。
- 手动类型断言:若需保留TS 5.5版本,可通过类型断言强制指定对象为
EventEmitter:- 针对mongoose connection:
import { EventEmitter } from 'node:events'; (connection as EventEmitter).on(event, callback); - 针对discord.js collector:
import { EventEmitter } from 'node:events'; (collector as EventEmitter).emit('end');
- 针对mongoose connection:
- 检查TS配置:确保
tsconfig.json中包含Node类型支持,且模块解析方式正确:{ "compilerOptions": { "types": ["node"], "moduleResolution": "Node16", // 其他配置项... } }
当前环境信息
- Node版本:v20.11.0
- 依赖版本列表:
@discordjs/builders@1.8.2 @discordjs/voice@0.16.1 @types/node@20.14.10 chalk@4.1.2 discord.js@14.15.3 ffmpeg-static@5.2.0 get-root-path@2.0.2 libsodium-wrappers@0.7.13 mongoose@8.4.5 typescript@5.5.3 (原版本5.3.3)
内容的提问来源于stack exchange,提问作者user21848296
相关产品推荐
相关产品推荐

