我正在使用Visual Studio Code进行NodeJS和Typescript开发。如果我正在编写以下代码:
import * as http from 'http';
编译器显示error TS2307: Cannot find module 'http'.如何处理此错误?格雷茨
error TS2307: Cannot find module 'http'.
axr492tv1#
这对我很有效:
npm install @types/node --save
我意识到这是一段时间以来的行动,但这是一个更更新的答案,以防有人绊倒在这个问题上。
fjnneemd2#
Typescript中出现此错误是因为http和Node.js的其他模块是用Javascript编写的。Typescript编译器没有关于用Javascript编写的库的类型和模块的信息。要添加此信息,您需要在Typescript项目中包含Node.js的类型声明。在项目的根目录中执行以下终端命令:
http
npm install -D @types/node
就这样!现在错误应该消失了。
上面的命令将下载类型声明文件(.d.ts)。现在你可以看到项目目录./node_modules/@types/node中的文件,http.d.ts就是其中之一。在这个文件中,你可以找到http模块和所有类型的声明,比如IncomingMessage,ServerResponse和HTTP服务器中使用的其他类型。这就是Typescript编译器和VS代码如何使用类型声明信息来为您提供类型安全。
.d.ts
./node_modules/@types/node
http.d.ts
IncomingMessage
ServerResponse
@types:
有一个社区维护的仓库名为DefinitelyTyped,其中包含许多新旧JavaScript库的类型声明文件,如Express,Sequelize,JQuery和许多其他库。当您在命令中指定@types包时,这意味着您正在从DefinitelyTyped仓库下载声明类型。
@types
-D标志:
该命令还将自动为package.json文件的devDependencies部分中的Node.js添加类型,如以下代码片段所示:
package.json
devDependencies
{ ... "devDependencies": { ... "@types/node": "^14.0.27" } }
-D标志确保类型进入package.json文件的devDependencies部分,而不是dependencies部分。因为这个包只在开发中需要,而不是在生产中。不要像其他答案中提到的那样使用--save标志,因为它在package.json的dependencies部分添加了类型依赖项,并使用不必要的文件膨胀了服务器安装。就是这样!
-D
dependencies
--save
8zzbczxx3#
我知道这个问题已经很老了,但我发现当tsconfig.json文件丢失或您有一个空的(“types”:[""])compilerOptions中“types”属性的数组。下面的配置将解决你的问题。当然你需要有@types/node,你也可以在那里添加更多的类型。
{ "compilerOptions": { "types": ["node"] } }
更多信息你可以查看链接
j9per5c44#
我也有同样的问题。和那个差不多:https://github.com/TypeStrong/ts-node/issues/216安装打字后:
typings install dt~node --global --save
然后把这个添加到我的文件中:
///<reference path="../typings/globals/node/index.d.ts"/>
突然间,它起作用了。
ffx8fchx5#
我在我的Angular 12项目中遇到了这个问题,当时我的IDE的自动完成将此导入插入到组件文件中,而我没有注意到:import * as e from 'cors';删除这一行解决了问题。
import * as e from 'cors';
5条答案
按热度按时间axr492tv1#
这对我很有效:
我意识到这是一段时间以来的行动,但这是一个更更新的答案,以防有人绊倒在这个问题上。
fjnneemd2#
更新溶液
Typescript中出现此错误是因为
http
和Node.js的其他模块是用Javascript编写的。Typescript编译器没有关于用Javascript编写的库的类型和模块的信息。要添加此信息,您需要在Typescript项目中包含Node.js的类型声明。在项目的根目录中执行以下终端命令:
就这样!现在错误应该消失了。
幕后是什么?
上面的命令将下载类型声明文件(
.d.ts
)。现在你可以看到项目目录./node_modules/@types/node
中的文件,http.d.ts
就是其中之一。在这个文件中,你可以找到http
模块和所有类型的声明,比如IncomingMessage
,ServerResponse
和HTTP服务器中使用的其他类型。这就是Typescript编译器和VS代码如何使用类型声明信息来为您提供类型安全。@types:
有一个社区维护的仓库名为DefinitelyTyped,其中包含许多新旧JavaScript库的类型声明文件,如Express,Sequelize,JQuery和许多其他库。当您在命令中指定
@types
包时,这意味着您正在从DefinitelyTyped仓库下载声明类型。-D标志:
该命令还将自动为
package.json
文件的devDependencies
部分中的Node.js添加类型,如以下代码片段所示:-D
标志确保类型进入package.json
文件的devDependencies
部分,而不是dependencies
部分。因为这个包只在开发中需要,而不是在生产中。不要像其他答案中提到的那样使用--save
标志,因为它在package.json
的dependencies
部分添加了类型依赖项,并使用不必要的文件膨胀了服务器安装。就是这样!
8zzbczxx3#
我知道这个问题已经很老了,但我发现当tsconfig.json文件丢失或您有一个空的(“types”:[""])compilerOptions中“types”属性的数组。
下面的配置将解决你的问题。当然你需要有@types/node,你也可以在那里添加更多的类型。
更多信息你可以查看链接
j9per5c44#
我也有同样的问题。和那个差不多:https://github.com/TypeStrong/ts-node/issues/216
安装打字后:
然后把这个添加到我的文件中:
突然间,它起作用了。
ffx8fchx5#
我在我的Angular 12项目中遇到了这个问题,当时我的IDE的自动完成将此导入插入到组件文件中,而我没有注意到:
import * as e from 'cors';
删除这一行解决了问题。