【问题标题】:Extending process.env variable types in Nodejs with Typescript使用 Typescript 在 Nodejs 中扩展 process.env 变量类型
【发布时间】:2022-08-09 13:29:06
【问题描述】:

所以,我有一个逻辑,可以根据我所在的 NODE_ENV 设置不同的 baseURL。

我的问题是process.env.NODE_ENV 只有两种类型,developmentproduction,我还想拥有staging 的选项。

所以我试图做的是在我的项目的根文件夹中创建一个名为environment.d.ts 的文件,在里面我做了:

declare namespace NodeJS {
  export interface ProcessEnv {
    NODE_ENV: \"development\" | \"production\" | \"staging\";
  }
}

但是,在尝试使用 staging 时,我仍然遇到错误:

This condition will always return \'false\' since the types \'\"production\"\' and \'\"staging\"\' have no overlap.ts(2367)

export const baseURL =
  process.env.NODE_ENV === \"development\"
    ? \"http://localhost:3000\"
    : process.env.NODE_ENV === \"staging\"
    ? `https://ego-stage.herokuapp.com/`
    : process.env.NODE_ENV === \"production\"
    ? \"https://egolounge.com/\"
    : \"http://localhost:3000\";

给我错误的行是我比较NODE_ENV 是否等于staging 的行,因为staging 作为一种类型在NODE_ENV 的默认界面中不存在,所以我需要用我自己的定义来扩展它,但是我创建的定义由于某种原因并没有取代默认的定义,当我推送到服务器时,它没有构建。

  • 在这些情况下,它们是什么真的很重要吗?我没有说string,而是明确说明我想要作为值的字符串,这与问题无关......
  • 你在问一个技术问题:让你的条款正确总是很重要。
  • @Mike\'Pomax\'Kamermans 这是 Typescript,不是 Javascript,这是一个 interface 不是类或函数,这里没有逻辑 || 运算符。
  • 这就是界面应该是这样的,代码是正确的(就该逻辑而言),问题是我创建的定义没有被识别并且没有取代process.env.NODE_ENV的默认类型,它只是\"staging\" | \"production\"和为了更清楚地说明我的观点,这是节点类型中内置的默认接口:prnt.sc/4WWMhoIV4CIR 如果我在这里添加| \"staging\",它工作得很好,但它位于node_modules,所以它不会被推送到服务器,这就是为什么我需要扩展它。
  • 很公平,但是:don\'t put pictures of code in your post,将文本放入您的代码中。特别是当 TS 错误被标记为您现在没有显示的代码时。

标签: node.js typescript


【解决方案1】:

我设法使用不同的文件名并删除任何导出来完全满足您的要求。

// <project_root>/index.d.ts
declare namespace NodeJS {
  interface ProcessEnv {
     NODE_ENV: 'dev' | 'stg' | 'prod';
  }
}

我只是简写 NODE_ENV 的接受值,因为我只是想用 .env 文件中的其他值扩展接口。

我发现export interface 没有做任何额外的事情来扩展 ProcesEnv 接口。

我认为如果您想更改文件的名称,您仍然必须包含 index.d.ts 和 ref 以及导入(或奇怪的三斜杠)。

或者,您需要将其添加到 tsconfig.json 文件中的包含项中。 有人要事实检查我吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2019-07-20
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多