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

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

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

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


当前回答

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

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

其他回答

并不能保证在Node进程中可用的环境变量是什么(如果有的话)——NODE_ENV变量只是一个由Express推广的约定,而不是Node本身内置的东西。因此,将它包含在类型定义中实际上没有意义。相反,他们定义过程。这样的环境:

export interface ProcessEnv {
    [key: string]: string | undefined
}

这意味着这个过程。Env可以用字符串进行索引,以便返回字符串(如果没有设置变量,则为undefined)。要修复你的错误,你必须使用索引语法:

let env = process.env["NODE_ENV"];

或者,正如jcalz在评论中指出的那样,如果你使用的是TypeScript 2.2或更新版本,你可以使用点语法访问上面定义的可索引类型——在这种情况下,你的代码应该可以正常工作。

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

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

只需对process.env.YOUR_VAR进行类型转换

例子:

mongoose
  .connect(String(process.env.MONGO_URL), {
    useNewUrlParser: true,
    useFindAndModify: false
  })
  .then(() => console.log('DB connected'))
  .catch((err: any) => console.error(err));

重要提示:如果你有一个web应用程序,你正在使用webpack。定义流程。Env在你的窗户上,那么这些就是你要找的类型:

declare namespace process {
    let env: {
        // this is optional, if you want to allow also
        // other values than the ones listed below, they will have type 
        // string | undefined, which is the default
        [key: string]: string
        commit_hash: string
        build_time: string
        stage: string
        version: string
        // ... etc.
    }
}

执行typescript最新版本后:

NPM install——save @types/node

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

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

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