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

如何为.env.example文件中的字面量键添加TypeScript类型?

实现方案

当然可以实现,下面是具体的方案,能让你的TypeScript类型和.env.example完全同步:

1. 写脚本自动从.env.example提取键生成类型文件

因为.env.example是纯文本格式,没法直接像JSON那样导入,所以我们可以写个简单的Node脚本,解析文件里的环境变量键,自动生成对应的TypeScript类型定义。

比如创建generate-env-types.js文件:

const fs = require('fs');
const path = require('path');

// 读取.env.example文件
const envExamplePath = path.resolve(__dirname, '.env.example');
const content = fs.readFileSync(envExamplePath, 'utf8');

// 匹配环境变量键:忽略注释行,提取key=value格式里的key
const envKeys = content.split('\n')
  .map(line => line.trim())
  .filter(line => line && !line.startsWith('#'))
  .map(line => line.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1])
  .filter(Boolean);

// 生成类型定义内容
const typeContent = `
// 自动生成的环境变量键类型,请勿手动修改
export type EnvKey = ${envKeys.map(key => `'${key}'`).join(' | ')};
`;

// 写入类型文件
const typeOutputPath = path.resolve(__dirname, 'env-types.d.ts');
fs.writeFileSync(typeOutputPath, typeContent.trim());

console.log(`已生成环境变量类型:${typeOutputPath}`);

运行这个脚本后,会生成env-types.d.ts,内容示例:

// 自动生成的环境变量键类型,请勿手动修改
export type EnvKey = 'PORT' | 'DB_URL' | 'API_KEY';

2. 配置自动执行脚本

为了让.env.example更新时自动同步类型,可以在package.json里添加相关脚本:

{
  "scripts": {
    "generate-env-types": "node generate-env-types.js",
    "watch-env-types": "nodemon --watch .env.example --exec \"npm run generate-env-types\""
  }
}
  • 运行npm run generate-env-types可手动生成最新类型
  • 运行npm run watch-env-types会监听.env.example的变化,自动更新类型文件
  • 也可以把generate-env-types加到你的构建脚本里,确保每次构建前类型都是最新的

3. 写安全的环境变量获取函数

用生成的EnvKey类型约束函数参数,确保只能访问.env.example里定义的键,还能做类型转换和缺失检查:

import type { EnvKey } from './env-types';

export function getEnv<K extends EnvKey>(key: K): string;
export function getEnv<K extends EnvKey>(key: K, defaultValue: string): string;
export function getEnv<K extends EnvKey>(key: K, defaultValue?: string): string {
  const value = process.env[key];
  if (value !== undefined) return value;
  if (defaultValue !== undefined) return defaultValue;
  throw new Error(`环境变量 ${key} 未设置,请检查.env文件`);
}

// 合法用法:TypeScript会自动提示合法键并校验
const port = getEnv('PORT');
const apiKey = getEnv('API_KEY', 'default-key');
// 错误示例:传了不在.env.example里的键,TypeScript直接报错
const invalidKey = getEnv('INVALID_KEY');

这样一来,只要更新.env.example并同步执行脚本(或通过监听自动更新),TypeScript就能实时感知到键的变化,而且getEnv函数只能访问合法的环境变量键,避免拼写错误或使用未定义的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:45:24