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

TypeScript已在environment.d.ts定义仍识别process.env为undefined如何解决

问题解决方法

你遇到的问题本质是TS没有正确识别你自定义的ProcessEnv类型声明,可按以下步骤排查和解决:

第一步:检查tsconfig.json配置是否包含声明文件

你写的environment.d.ts需要被TS纳入类型检查范围,要确保tsconfig.json中配置了对应的包含规则:

{
  "include": [
    "src/**/*",
    "environment.d.ts" // 此处路径要匹配你声明文件的实际存放位置
  ],
  "typeRoots": [
    "node_modules/@types",
    "./" // 如果声明文件放在根目录就加此项,放在src/types目录则写"src/types"
  ]
}

如果是用ts-node直接运行TS代码,还需要在启动命令添加--files参数,或者在tsconfig.json的ts-node配置项开启files: true,确保自定义声明文件被正常加载。

第二步:验证类型声明合并是否生效

你现有的声明文件写法是正确的,末尾的export {}是必须项,用来标记这是一个模块,才能正确合并全局的NodeJS.ProcessEnv接口。
配置正确的情况下,此时TS应该会将process.env.DATABASE_URL识别为非可选的string类型,不会再出现undefined的类型提示。

兜底解决方案

如果不想调整配置,或者需要额外的运行时保障,可以用以下两种方法:

  • 类型断言:确定运行时一定会加载该环境变量的情况下,可以直接强制指定类型:
    const db = PgPromise()(process.env.DATABASE_URL as string);
    
  • 运行时校验函数:兼顾类型安全和运行时容错,避免遗漏环境变量导致线上问题:
    function getRequiredEnv(key: keyof NodeJS.ProcessEnv): string {
      const value = process.env[key];
      if (!value) {
        throw new Error(`缺失必要环境变量:${key}`);
      }
      return value;
    }
    
    // 使用时直接调用
    const db = PgPromise()(getRequiredEnv('DATABASE_URL'));
    

内容的提问来源于stack exchange,提问作者blub

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:09:04