TypeScript Academy · 课时

环境变量与配置类型

使用经过验证的配置模块为 process.env 添加类型

第 4 / 4 课13 个步骤

环境变量与配置类型 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

欢迎

为 process.env 添加类型可以避免环境变量缺失或类型错误导致的运行时错误。

问题所在

process.env 的值始终是 string | undefined。在未检查的情况下访问它们会导致错误。
const port = process.env.PORT; // string | undefined
// server.listen(port); // could be undefined!

process.env 的模块扩充

在全局声明文件中扩展 ProcessEnv,为已知环境变量添加类型。
declare global {
  namespace NodeJS {
    interface ProcessEnv {
      PORT: string;
      DATABASE_URL: string;
      NODE_ENV: 'development' | 'staging' | 'production';
    }
  }
}

配置模块模式

创建带类型的配置模块,用于验证并导出环境变量。
function requireEnv(key: string): string {
  const val = process.env[key];
  if (!val) throw new Error(`Missing env var: ${key}`);
  return val;
}
export const config = {
  port: parseInt(requireEnv('PORT')),
  dbUrl: requireEnv('DATABASE_URL'),
};

使用 Zod 验证环境变量

在启动时使用 Zod 验证环境变量,以进行全面的运行时检查。
import { z } from 'zod';
const envSchema = z.object({
  PORT: z.string().transform(Number),
  DATABASE_URL: z.string().url(),
  NODE_ENV: z.enum(['development', 'production']),
});
export const env = envSchema.parse(process.env);

使用 TypeScript 的 dotenv

在访问 process.env 之前,使用 dotenv 加载 .env 文件。
import 'dotenv/config';
// Or:
import dotenv from 'dotenv';
dotenv.config();

严格访问 env

始终通过配置模块访问 env,在应用代码中绝不要直接访问 process.env。

不同环境的配置

使用 NODE_ENV 加载特定于环境的配置文件。
const envFile = `.env.${process.env.NODE_ENV ?? 'development'}`;
dotenv.config({ path: envFile });

日志中的密钥脱敏

绝不要记录包含密钥的配置对象。请对敏感字段进行脱敏。
console.log({ ...config, dbPassword: '***', apiKey: '***' });

类型安全的功能标志

为功能标志环境变量添加类型。
const flags = {
  enableBeta: process.env.ENABLE_BETA === 'true',
  logLevel: (process.env.LOG_LEVEL ?? 'info') as 'debug' | 'info' | 'warn',
};

使用环境变量进行测试

使用 .env.test 文件,并在测试设置中加载它。
// tests/setup.ts
process.env.DATABASE_URL = 'sqlite:///:memory:';
process.env.NODE_ENV = 'test';

快速检查

未经任何扩充时,`process.env.PORT` 的 TypeScript 类型是什么?

回顾

通过模块扩充扩展 ProcessEnv,或使用 Zod 配置模块,在启动时为环境变量添加类型并进行验证。始终通过配置模块访问 env,绝不要直接访问。
免费开始

用 AI 导师学习 TypeScript — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
101
课程
352

常见问题解答

「环境变量与配置类型」课时是免费的吗?

是的 — 「环境变量与配置类型」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「环境变量与配置类型」这节课中我会学到什么?

使用经过验证的配置模块为 process.env 添加类型 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「环境变量与配置类型」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Node.js 配置 TypeScript
  2. 为 Express 请求与响应添加类型
  3. 带类型的中间件与错误处理器
  4. 环境变量与配置类型
← 返回 TypeScript Academy