Node.js 16+TypeScript环境下discord.js带类型导入报错如何解决?
解决方案
1. 优先使用TS专属混合导入语法
直接用TS兼容CommonJS包的导入写法,既保留完整类型提示,编译后也符合CommonJS运行规则,不会触发运行报错和eslint规则校验:
// 替换原来的import/require写法 import Discord = require('discord.js'); const { Client, Intents } = Discord; // dotenv同样可以用该写法适配,或者保留原有import,搭配下方tsconfig配置即可 import dotenv = require('dotenv');
2. 补全tsconfig.json必选配置
在compilerOptions中添加以下配置,解决ES模块和CommonJS模块的互操作问题:
{ "compilerOptions": { "target": "es2020", "module": "CommonJS", // 如果不需要输出ESM,直接换成CommonJS最稳妥,Node16原生支持 "moduleResolution": "node", "esModuleInterop": true, // 允许ES模块导入CommonJS模块 "allowSyntheticDefaultImports": true, // 允许没有默认导出的模块使用默认导入 "skipLibCheck": true // 跳过第三方库的类型检查,避免依赖内部类型错误打断编译 } }
3. 若坚持使用ESM规范(package.json加"type": "module")
调整tsconfig配置适配Node原生ESM规则即可:
{ "compilerOptions": { "target": "es2020", "module": "NodeNext", "moduleResolution": "NodeNext", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "skipLibCheck": true } }
配置后原来的import { Client, Intents } from 'discord.js'写法即可正常运行。
4. 异常问题排查
如果调整配置后仍然报minLength相关错误,执行以下操作重置依赖:
- 确认当前Node版本 >= 16.9.0(discord.js v14的最低要求)
- 删除项目下的node_modules文件夹、package-lock.json/yarn.lock文件
- 重新执行
npm install安装依赖
内容的提问来源于stack exchange,提问作者Crocsx
相关产品推荐
相关产品推荐

