Next.js 13.1.6环境变量undefined,TypeScript类型匹配报错求助
解决Next.js 13.1.6 + TypeScript环境变量类型不匹配问题
问题原因
TypeScript 默认认为 process.env 中的变量可能是 undefined,但 mongoose.connect() 要求必须传入确定的 string 类型参数,因此出现类型不兼容报错。
解决方案
方案1:非空断言快速解决
直接在环境变量后加 !,明确告诉 TypeScript 该变量不会是 undefined:
const db = mongoose.connect(process.env.NEXT_PUBLIC_MONGODB_URI!);
注意:必须确保 .env 文件中确实配置了 NEXT_PUBLIC_MONGODB_URI 变量,否则运行时会抛出连接失败错误。
方案2:提前校验变量(更安全)
使用前先检查变量是否存在,不存在则抛出错误,TypeScript 会自动推断后续变量为 string 类型:
async function connect() { // ... 原有代码不变 const mongoUri = process.env.NEXT_PUBLIC_MONGODB_URI; if (!mongoUri) { throw new Error("请在.env文件中配置NEXT_PUBLIC_MONGODB_URI环境变量"); } const db = mongoose.connect(mongoUri); }
这种方式能提前发现配置缺失问题,避免运行时出现未知故障。
方案3:声明环境变量类型(规范做法)
在项目根目录创建 env.d.ts 文件,手动声明 process.env 的类型:
declare global { namespace NodeJS { interface ProcessEnv { NEXT_PUBLIC_MONGODB_URI: string; } } } export {};
添加后 TypeScript 会识别该环境变量为 string 类型,不再报错。同样要保证 .env 文件中已正确配置变量。
额外注意
- 修改
.env文件后,需要重启 Next.js 开发服务器才能生效; NEXT_PUBLIC_前缀的环境变量可在客户端和服务端代码中通用,如果仅在服务端使用,也可去掉前缀,但需在next.config.js中配置暴露规则。
内容的提问来源于stack exchange,提问作者SmarTv
相关产品推荐
相关产品推荐

