迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

在 TypeScript 中为 process.env 定义类型

作者:迹忆客 最近更新:2022/11/05 浏览次数:

在 TypeScript 中为 process.env 定义类型:

  1. 创建一个 environment.d.ts 文件并在全局命名空间中声明类型。
  2. 将属性添加到 ProcessEnv 接口。
  3. 使用 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_PORTDB_USERENV 属性添加类型。

确保根据我们的用例调整属性的名称。

现在我可以访问 process.env 对象的属性并获得自动完成功能。

index.ts

console.log(process.env.DB_USER);
console.log(process.env.ENV);
console.log(process.env.DB_PORT);

typescript process env undefined

但是,它们的值现在是 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"

TypeScript 中为 process env 定义类型

加载和初始化 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

如果我们尝试访问未定义值的内置方法,则会出现运行时错误,因此当我们不确定是否会设置该属性时,最好使用可选属性。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便