在 TypeScript 中为 process.env 定义类型
在 TypeScript 中为 process.env
定义类型:
-
创建一个
environment.d.ts
文件并在全局命名空间中声明类型。 - 将属性添加到 ProcessEnv 接口。
-
使用
export {}
使文件成为模块。
在项目的 src 目录中,创建一个包含以下 environment.d.ts 文件的 types 目录。
src/types/environment.d.ts
export {}; declare global { namespace NodeJS { interface ProcessEnv { DB_PORT: number; DB_USER: string; ENV: 'test' | 'dev' | 'prod'; } } }
上面的示例显示了如何为 process.env
对象上的 DB_PORT 、DB_USER 和 ENV 属性添加类型。
确保根据我们的用例调整属性的名称。
现在我可以访问 process.env
对象的属性并获得自动完成功能。
index.ts
console.log(process.env.DB_USER); console.log(process.env.ENV); console.log(process.env.DB_PORT);
但是,它们的值现在是
undefined
的,因为我们还没有设置 .env 文件。
如果我们已尝试重新启动 IDE,但仍无法自动完成 process.env
对象上的指定属性,请尝试将类型目录的路径添加到 tsconfig.json 文件中。
{
"compilerOptions": {
// ... rest
"typeRoots": ["./node_modules/@types", "./src/types"]
}
}
我们在 environment.d.ts 文件中使用 export {}
行将其标记为外部模块。 模块是包含至少 1 个导入或导出语句的文件。 我们必须这样做才能扩大全球范围。
TypeScript 在查找常规 .ts 文件的相同位置查找 .d.ts 文件,这取决于 tsconfig.json 文件中的包含和排除设置。
要为 process.env
对象上的指定属性添加值,我们需要安装 dotenv 包。
在项目的根目录中打开终端并运行以下命令:
$ npm install dotenv
$ npm install -D @types/node
现在在项目的根目录中创建一个 .env 文件。
.env
DB_PORT=9999 DB_USER=james_doe ENV=test
确保将 .env 文件添加到我们的 .gitignore 中,尤其是在您使用公共存储库时。
在我们的 index.ts 文件中,在导入其他任何内容之前,请导入并初始化 dotenv 包。
index.ts
import 'dotenv/config'; console.log(process.env.DB_USER); // 👉️ "james_doe" console.log(process.env.ENV); // 👉️ "test" console.log(process.env.DB_PORT); // 👉️ "9999"
加载和初始化
dotenv
包作为 index.ts 文件中的第一件事非常重要,尤其是当我们有其他文件需要访问环境变量时。
如果在初始化 dotenv 之前导入另一个文件,则最终会在 process.env
对象上设置属性之前运行这些文件。
现在重新启动我们的开发服务器,我们应该会看到 process.env
对象上的属性打印出指定的值。
请注意
,DB_PORT 属性具有字符串类型的值,即使我们在 .env 文件中将其设置为数字。
如果我们不确定是否会填充 process.env
对象上的特定属性,请将其标记为可选。
export {};
declare global {
namespace NodeJS {
interface ProcessEnv {
DB_PORT?: number; // 👈️ mark optional
DB_USER: string;
ENV: 'test' | 'dev' | 'prod';
}
}
}
我们使用问号将 DB_PORT 属性标记为可选。
这意味着它要么是指定的类型,要么是 undefined
的。
当我们希望在代码中执行操作之前必须检查属性是否存在时,这很有用。
console.log(process.env.DB_PORT || ''); // 👉️ "9999" or '', but not undefined
如果我们尝试访问未定义值的内置方法,则会出现运行时错误,因此当我们不确定是否会设置该属性时,最好使用可选属性。
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。