You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:15:41