打字稿 - 无法找到模块' http'在Visual Studio代码

时间:2016-07-18 10:52:26

标签: typescript nodes visual-studio-code

我使用Visual Studio Code进行NodeJS和Typescript开发。 如果我正在编写此代码:

import * as http from 'http'; 

编译说error TS2307: Cannot find module 'http'.

如何处理此错误?

格尔茨

3 个答案:

答案 0 :(得分:32)

这对我有用:

npm install @types/node --save

我意识到OP已经有一段时间了,但是这是一个更新的答案,以防有人遇到这个问题。

答案 1 :(得分:1)

我有同样的问题。它类似于: https://github.com/TypeStrong/ts-node/issues/216

安装以下内容后输入:

typings install dt~node --global --save

然后将其添加到我的文件中:

///<reference path="../typings/globals/node/index.d.ts"/>

突然间它起作用了。

答案 2 :(得分:0)

更新的解决方案

此错误在Typescript中发生,因为http和Node.js的其他模块是用Javascript编写的。 Typescript编译器没有有关使用Javascript编写的库的类型和模块的信息。要添加此信息,您需要在Typescript项目中包括Node.js的类型声明。

在项目的根目录中执行以下终端命令:

npm install -D @types/node

就是这样!现在错误应该消失了。


幕后发生了什么?

以上命令将为Node.js下载类型声明文件(.d.ts)。现在,您可以在项目的目录./node_modules/@types/node中看到文件,http.d.ts是其中之一。在此文件中,您将找到http模块的声明以及所有类型的声明,例如IncomingMessageServerResponse以及HTTP服务器中使用的其他类型。这就是Typescript编译器和VS代码使用类型声明信息为您提供类型安全的方式。

@类型:

有一个由社区维护的存储库,称为 DefinitelyTyped,其中包含许多旧的和新的Javascript库(例如Express,Sequelize,JQuery等)的类型声明文件。当您在命令中指定@types软件包时,表示您正在从DefinitelyTyped存储库下载声明类型。

-D标志:

该命令还将自动在devDependencies文件的package.json部分中添加Node.js的类型,如以下代码片段所示:

{
  ...
  "devDependencies": {
    ...
    "@types/node": "^14.0.27"
  }
}

-D标志可确保类型进入devDependencies文件的package.json部分而不是dependencies部分。因为仅在开发而不是生产中才需要此软件包。请勿使用其他答案中提到的--save标志,因为它会在dependencies的{​​{1}}部分中添加类型依赖关系,并在服务器安装过程中增加不必要的文件。

就是这样!