如何在 TypeScript 中读取节点环境变量?
如果我使用 process.env.NODE_ENV
我有这个错误:
Property 'NODE_ENV' does not exist on type 'ProcessEnv'
我已经安装了 @types/node
但它没有帮助。
原文由 Christophe Le Besnerais 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何在 TypeScript 中读取节点环境变量?
如果我使用 process.env.NODE_ENV
我有这个错误:
Property 'NODE_ENV' does not exist on type 'ProcessEnv'
我已经安装了 @types/node
但它没有帮助。
原文由 Christophe Le Besnerais 发布,翻译遵循 CC BY-SA 4.0 许可协议
在项目中安装 @types/node
后,您可以准确地告诉 TypeScript process.env
中存在哪些变量:
environment.d.ts
declare global {
namespace NodeJS {
interface ProcessEnv {
GITHUB_AUTH_TOKEN: string;
NODE_ENV: 'development' | 'production';
PORT?: string;
PWD: string;
}
}
}
// If this file has no import/export statements (i.e. is a script)
// convert it into a module by adding an empty export statement.
export {}
用法:
process.env.GITHUB_AUTH_TOKEN; // $ExpectType string
此方法将为您提供 IntelliSense,它还利用了字符串文字类型。
注意:上面的代码片段是 _模块扩充_。包含模块扩充的文件必须是 _模块_(而不是 _脚本_)。模块和脚本的区别在于模块至少有一个导入/导出语句。
为了使 TypeScript 将您的文件视为一个模块,只需向其中添加一个 import 语句即可。它可以是任何东西。甚至
export {}
也行。原文由 Karol Majewski 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答4.9k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
5 回答2k 阅读
3 回答2k 阅读
1 回答3.3k 阅读
1 回答2.7k 阅读
无法保证 Node 进程中将提供哪些(如果有的话)环境变量 -
NODE_ENV
变量只是 Express 推广的约定,而不是 Node 本身内置的东西。因此,将它包含在类型定义中是没有意义的。相反, 他们定义process.env
像这样:这意味着
process.env
可以用字符串索引以获取字符串(或undefined
,如果未设置变量)。要修复您的错误,您必须使用索引语法:或者,正如 jcalz 在评论中指出的那样,如果您使用的是 TypeScript 2.2 或更高版本,您可以使用点语法访问上面定义的可索引类型 - 在这种情况下,您的代码应该按原样工作。