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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:45:43