process.env.NODE_ENV的TypeScript定义?

时间:2016-02-27 07:13:24

标签: typescript

是否有一个项目使用TypeScript定义“process”变量来使用process.env.NODE_ENV?找不到任何地方。

7 个答案:

答案 0 :(得分:38)

节点8的更新

现在envDefinitelyTyped中声明为ProcessEnv

env: ProcessEnv;

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

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

npm install --save-dev @types/node

Pre Node 8版本

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

env: any;

答案 1 :(得分:13)

'流程的定义'变量可以在默认的node.js d.ts中找到,来自明确的类型,并在你的typings.json中添加如下:

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

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

答案 2 :(得分:4)

在使用process.env.NODE_ENV

之前添加
declare var process : {
  env: {
    NODE_ENV: string
  }
}

答案 3 :(得分:3)

要在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。我建议保留?除非您已验证它是否已设置在库中的某个位置。

答案 4 :(得分:0)

如果您在VSCode中遇到此错误,也许您只需要重新启动它即可。

答案 5 :(得分:0)

declare namespace NodeJS {
  interface ProcessEnv {
    [key: string]: string | undefined
    NODE_ENV?: 'development' | 'production' | 'test'
  }
}

将上面的代码放入文件global.d.ts

答案 6 :(得分:0)

如果您使用的是 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 {}