【问题标题】:TypeScript definitions for process.env.NODE_ENV?process.env.NODE_ENV 的 TypeScript 定义?
【发布时间】:2016-06-10 13:33:33
【问题描述】:

是否有带有 TypeScript 定义的“流程”变量的项目以使用 process.env.NODE_ENV?找不到任何地方。

【问题讨论】:

  • 对我的开发环境没有任何作用,所以我只使用了npmjs.com/package/dotenv 包,现在它可以工作了。

标签: typescript


【解决方案1】:

'process' 变量的定义可以在默认的 node.js d.ts 中找到,从明确键入并添加到您的 typings.json 中,如下所示:

"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts"

我认为特定的 NODE_ENV 变量没有任何定义。因为它只是一个约定(被 express link 广泛使用)并且 node.js 本身并不关心那个特定的环境变量。

【讨论】:

  • 请注意,这与webpack-envDefinitelyTyped 搭配起来不会很好
【解决方案2】:

节点 8 更新

现在envDefinitelyTyped 中被声明为ProcessEnv

env: ProcessEnv;

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

TypeScript 2 支持 node.js 的 npm 包类型定义。它目前使用 DefinitivelyTyped node.d.ts。

npm install --save-dev @types/node

节点 8 前版本

处理env is declared as any in DefinitelyTyped node.d.ts

env: any;

【讨论】:

  • 由于node.v8 env 在DefinitelyTyped node.d.ts 中被声明为ProcessEnv
  • @Sandokan El Cojo:不错。根据您的评论更新。
  • 你能给出这个东西的回购链接吗?我复制但它不起作用,我收到错误:Property 'REDIS_SESSION_SECRET' is missing in type 'ProcessEnv' but required in type 'ProcessEnv'. [2741] 我的代码是const env: ProcessEnv = process.env
  • 感谢这对我有用:npm install --save-dev @types/node
【解决方案3】:

只需在使用前添加 process.env.NODE_ENV

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

【讨论】:

  • 这是过时的方法,请在其他答案中查看新方法 (@types/node)
【解决方案4】:

在 TypeScript 3+ 中添加节点定义

使用来自通过 npm/yarn 确定类型的类型:

# Install the latest
npm install --save-dev @types/node
# or
yarn add @types/node --dev

# To install the right types for your version of node (e.g. 12 here)
npm install --save-dev @types/node@^12
yarn add @types/node@^12 --dev

在您的类型可用的情况下,对象process.env 应该在您的代码中可用。

扩展process.env

您可以使用declaration mergingprocess.env 添加新值。在你的项目中新建一个d.ts文件,然后添加:

declare global {
  namespace NodeJS {
    interface ProcessEnv {
      NODE_ENV?: string
    }
  }
}

这会让你写process.env.NODE_ENV。我建议保留 ?除非您确认它已设置在库中的某个位置。

【讨论】:

  • 应该将类型安装为 devDependency 吗?
  • 是的,应该是
【解决方案5】:

如果你在 VSCode 中遇到这个错误,也许你只需要重新启动它。

【讨论】:

    【解决方案6】:
    declare namespace NodeJS {
      interface ProcessEnv {
        [key: string]: string | undefined
        NODE_ENV?: 'development' | 'production' | 'test'
      }
    }
    

    把上面的代码放到你的文件global.d.ts

    【讨论】:

      【解决方案7】:

      如果您使用的是create-react-app your-app-test --template typescript 那么已经存在一个文件来设置你的环境变量。

      文件名:react-app-env.d.ts 位于src 文件夹中。

      然后您可以使用此模板在该文件中设置您的自定义 env 变量:

      /// <reference types="react-scripts" />
      declare global {
          namespace NodeJS {
            interface ProcessEnv {
              GITHUB_AUTH_TOKEN: string;
              NODE_ENV: 'development' | 'production';
              PORT?: string;
              PWD: string;
            }
          }
        }
        
        // If this file has no import/export statements (i.e. is a script)
        // convert it into a module by adding an empty export statement.
        export {}
      

      【讨论】:

        猜你喜欢
        • 2021-11-04
        • 2022-01-05
        • 2012-06-21
        • 1970-01-01
        • 2019-12-05
        • 2022-07-22
        • 1970-01-01
        • 2017-08-20
        • 2014-08-31
        相关资源
        最近更新 更多