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

如何将.env中的PORT值引入TypeScript文件解决未定义错误?

解决TypeScript中无法读取.env PORT的问题

我来帮你一步步搞定这个问题,核心要解决两个关键点:正确从环境变量中获取PORT并声明变量,以及让TypeScript识别自定义的环境变量类型,同时确保dotenv加载顺序没问题。

1. 修复server.ts的变量声明与dotenv加载逻辑

你当前的代码里没声明port变量,而且要注意:在使用import的ES模块场景中,import语句会被引擎优先处理,原来的require('dotenv').config()可能滞后于import执行,导致环境变量没及时注入。调整后的server.ts如下:

// 优先加载dotenv,确保环境变量提前注入
import dotenv from 'dotenv';
dotenv.config();

import app from "./app";

// 从process.env获取PORT,同时设置默认值避免未定义的情况
const port = process.env.PORT || 4040;

app.listen(port, function() {
 console.log('Express server listening on port ' + port);
});

2. 让TypeScript识别自定义环境变量

VS Code提示port相关错误,本质是TypeScript默认不知道process.env.PORT的存在——默认的NodeJS.ProcessEnv接口里没有我们自定义的PORT字段。我们可以通过类型声明扩展解决:

在项目根目录创建types文件夹,新建env.d.ts类型声明文件(文件名只要是.d.ts格式即可),内容如下:

declare namespace NodeJS {
  interface ProcessEnv {
    PORT: string;
  }
}

这样TypeScript就会识别process.env.PORT是合法的字符串类型,编辑器的报错会自动消失。

3. 验证脚本与依赖(可选)

如果运行npm run dev还是有问题,可以在dev脚本里直接指定加载dotenv,确保万无一失:

"dev": "ts-node --require dotenv/config ./lib/server.ts"

另外你用的dotenv@^4.0.0版本是兼容TypeScript的,要是遇到奇怪问题也可以升级到最新稳定版(比如^16.0.0),不过这不是必须操作。

最后测试

现在运行npm run dev,应该能正常打印Express server listening on port 4040,同时VS Code的类型提示也不会再报错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:18