Firebase Cloud Functions部署discord.js出现TypeScript类型报错
问题根因
tsconfig.json中exclude配置不生效是规则认知偏差:该配置仅对开发者自行编写的业务源码文件生效,只要代码中通过import引入了第三方依赖,TypeScript 会自动读取依赖的类型声明文件做校验,和是否在exclude中添加依赖路径无关,此前配置的各类node_modules排除规则本身就不会产生作用。- 批量类型报错本质是TypeScript版本不兼容:报错信息里的模板字符串类型(例如
`#${string}`)、索引签名键重映射(keyof GuildAuditLogsIds as GuildAuditLogsIds[Key])均为 TypeScript 4.1 及以上版本才支持的语法,Firebase Cloud Functions 初始化项目时默认搭载的TypeScript版本多为3.x或4.0版本,无法识别discord.js高版本中使用的新TS语法,因此会抛出数百个类型错误。
解决方案
按以下步骤操作即可修复:
1. 升级functions目录下的TypeScript依赖
Firebase部署时只会读取functions目录下的依赖,需要进入该目录升级TypeScript到兼容版本:
cd functions # discord.js v14建议搭配4.8以上版本TS,可直接安装最新版 npm install typescript@latest --save-dev
2. 调整tsconfig.json配置
打开functions目录下的tsconfig.json,在compilerOptions中开启skipLibCheck,该配置的作用是跳过第三方依赖声明文件的类型校验,是处理依赖类型兼容问题的标准方案,不会影响自身业务代码的类型检查:
{ "compilerOptions": { "module": "commonjs", "noImplicitReturns": true, "noUnusedLocals": true, "outDir": "lib", "sourceMap": true, "strict": true, "target": "es2020", "skipLibCheck": true }, "compileOnSave": true, "include": [ "src" ] }
3. 校验Node.js版本配置
discord.js v14要求Node.js版本不低于16.9.0,需要在functions/package.json中确认engines配置符合要求,推荐直接使用Node.js 18长期支持版本:
{ "engines": { "node": "18" } }
4. 重新部署
回到项目根目录执行部署命令即可:
firebase deploy --only functions
常见踩坑点
- 不要在项目根目录安装TypeScript,必须在functions目录下安装,否则部署时还是会调用Firebase内置的旧版本TS
- 不需要额外配置
exclude排除discord.js相关路径,开启skipLibCheck后就不会再对node_modules下的类型文件做全量校验 - 如果本地编译正常但部署时报错,先删除functions目录下的
node_modules和package-lock.json后重新执行npm install,再尝试部署,避免本地依赖版本和部署时安装的版本不一致。
内容的提问来源于stack exchange,提问作者George Abreu
相关产品推荐
相关产品推荐

