如何在TypeScript中读取节点环境变量?

如果我使用process.env。NODE_ENV我有这个错误:

Property 'NODE_ENV' does not exist on type 'ProcessEnv'

我已经安装了@types/node,但它没有帮助。


当前回答

还可以使用类型保护函数。像这样,返回类型是

parameterName is string

如。

function isEnvVarSpecified(envVar: string | undefined): envVar is string {
  if(envVar === undefined || envVar === null) {
    return false;
  }
  if(typeof envVar !== 'string'){
    return false;
  }
  return true;
}

然后你可以调用它作为类型保护:

function myFunc() {
  if(!isEnvVarSpecified(process.env.SOME_ENV_VAR')){
      throw new Error('process.env.SOME_ENV_VAR not found')
  }
  // From this point on the ts compiler won't complain about 
  // process.env.SOME_ENV_VAR being potentially undefined
}

其他回答

执行typescript最新版本后:

NPM install——save @types/node

你可以使用过程。env直接。

console.log(process.env[“NODE_ENV”])

如果您设置了NODE_ENV,您将看到预期的结果。

在使用process.env之前添加即可。NODE_ENV跟随行:

declare var process : {
  env: {
    NODE_ENV: string
  }
}

下面是一个简短的函数,它保证会拉动进程。将Env值作为字符串—或以其他方式抛出错误。

对于更强大(但也更大)的东西,这里的其他人建议使用env-var。

/**
 * Returns value stored in environment variable with the given `name`.
 * Throws Error if no such variable or if variable undefined; thus ensuring type-safety.
 * @param name - name of variable to fetch from this process's environment.
 */
export function env(name: string): string {
  const value = process.env[name];

  if (!value) {
    throw new Error(`Missing: process.env['${name}'].`);
  }

  return value;
}

然后你应该能够编写如下代码:

let currentEnvironment: string;
currentEnvironment = env('NODE_ENV');

我知道这将帮助一些人搜索这个,不能找到简单的答案,为什么你的过程。Env变量让你的编译器抱怨:

安装@types /节点:

npm i @types/node

然后当你将env作为字符串包含时,这样做:

process.env.YOUR_ENV ?? ''

双问号允许您检查null/undefined。

使用节点进程的最佳和最简单的方法。你的typescript项目中的env是首先用tsc编译,然后用node提供你的env var运行编译后的javascript文件。ts是你想要的输出目录也是编译文件的名称,我使用dist作为输出目录和index.js为例):

cd my-typescriptproject
tsc
NODE_ENV=test node ./dist/index.js