从命令行读取参数 - 错误 TS2304:找不到名称“进程”

Posted

技术标签:

【中文标题】从命令行读取参数 - 错误 TS2304:找不到名称“进程”【英文标题】:Read arguments from command line - error TS2304: Cannot find name 'process' 【发布时间】:2016-06-03 17:37:31 【问题描述】:

使用 TypeScript 1.7.5 版。

我正在编写一个 nodeJS 程序,我想在其中读取用户传递的命令行参数(2 个整数)。在原始 javascript 中一切正常,但 TypeScript 出现问题。

process.argv
在 TypeScript 文件中使用,当它被编译为 JavaScript 时,编译器会出错,因为它无法识别“进程”变量。
错误 TS2304:找不到名称“进程”

我尝试在文件顶部声明一个新的 var“进程”,但这会覆盖本机变量并且它不再包含参数...

我想将所有代码都保留在 TypeScript 中,只在构建时编译为 JavaScript。解决此问题的最佳方法是什么?

【问题讨论】:

您是否为节点安装了typings?即typings install --save --ambient node @McMath 我刚刚安装了这些类型,但它们对错误没有任何影响。请注意 - 除了这个问题,我的 TypeScript 程序可以完美编译和运行。 我认为您必须在脚本顶部手动包含它们/// <reference path="../typings/main.d.ts" /> 好的,您还需要执行一些步骤。我将在答案中展开。给我几分钟。 【参考方案1】:

在谷歌上搜索这个错误太久之后......

如果使用 VS Code,请检查它是否在正确的目录中打开。如果没有,cd进入正确的目录,code .打开一个新窗口,然后npm i。这为我解决了问题 - 有时最简单的解决方案需要最长时间才能找到。

【讨论】:

【参考方案2】:

我在 OSX 上的完整解决方案结合了上述一些 error TS2304: Cannot find name 'process'. 我的用例是从 jsx/js 部分迁移到 tsx/ts 的 React 项目。

    yarn add -D @types/node 更新了tsconfig.json 以包括"typeRoots": ["./node_modules/@types"] 在错误的文件顶部包含import from 'node';

使用 Typescript v2.7.1 时,我需要所有 3 个步骤

【讨论】:

【参考方案3】:

我遇到了这个问题,不得不将以下内容添加到包含进程调用的文件中:

import   from 'node';

在什么时候识别出进程

【讨论】:

【参考方案4】:

TypeScript 2 - Windows 用户

由于“ts2304 找不到名称‘进程’”这个问题在谷歌的顶部,我想为 Windows 用户添加一些帮助。我试图使用配置文件中的环境变量并遇到此错误。

TSError:无法编译 TypeScript。

找不到名称“进程”- (2304)

我终于把它添加到了我的 tsconfig.json 中:


  "compilerOptions": 
    "typeRoots": [
      "./node_modules/@types"
    ]
  

这是 tsconfig.json 和 node_modules 在同一目录级别,但由于某种原因编译器没有看到它。奇怪的是,这个错误只发生在 process.env 变量上,因为我的其余代码编译没有问题。

【讨论】:

非常感谢,这与通过npm install --save-dev @types/node添加节点类型一起完成了技巧【参考方案5】:

更新:2016 年 9 月

您需要确保 Node 的类型定义可用。执行此操作的方法取决于您使用的 TypeScript 版本。

TypeScript 1

使用Typings 安装定义。

typings install --save --global env~node

确保在您的tsconfig.json 文件中包含typings/index.d.ts。将其包含在 "files" 数组中:

"files": ["typings/index.d.ts"]

或者确保从 "exclude" 数组中省略它。

TypeScript 2

在 TypeScript 2 中,定义可以是 installed via npm 在 @types 范围内。

npm install --save-dev @types/node

原答案:2016 年 2 月

您必须确保适当的类型定义可用。为此,请使用 typings 包管理器。安装节点的定义如下:

typings install --save --ambient node

现在,有几种方法可以确保编译器可以使用这些定义。首选方法是set up your tsconfig file,如下所示:


  "exclude": [
    "typings/browser.d.ts",
    "typings/browser",
    "node_modules"
  ]

或者,或者:


  "files": [
    "typings/main.d.ts"
  ]

如果您不使用 tsconfig 文件,则可以在主条目文件的顶部使用引用,如下所示:

/// <reference path="path/to/typings/main.d.ts" />

【讨论】:

谢谢!我所要做的就是在我的程序顶部包含引用 main.d.ts 文件的最后一部分。它现在可以按预期编译和运行。 使用 typescript 2,现在是 npm i -D @types/node @Offirmo 感谢您的意见。我已经相应地更新了答案。【参考方案6】:

在查找“找不到名称‘进程’”时,此问题位于 Google 结果的顶部,因此我将在此处将我的 2 美分添加到不太相关的问题中。

如果您需要在使用if(process.env.NODE_ENV === "production") 来通过 webpack 剥离生产中的一些代码时摆脱错误,只需在该行之前添加以下声明:

declare var process: 
   env: 
       NODE_ENV: string
   
;

【讨论】:

以上是关于从命令行读取参数 - 错误 TS2304:找不到名称“进程”的主要内容,如果未能解决你的问题,请参考以下文章

TS2304:找不到名称要求和处理

接收TS2304:找不到名称'文件'| TS2304:运行“npm run tsc”命令时找不到名称“ReadableStream”

错误 TS2304:找不到名称“承诺”

错误 TS2304:找不到名称“发电机”

打字稿错误 TS2304:即使使用 esnext 也找不到名称 AsyncIterator

嚎叫:角度错误 TS2304:找不到名称“嚎叫”[重复]