【问题标题】:Typescript - Cannot find module 'http' on Visual Studio Code打字稿 - 在 Visual Studio Code 上找不到模块“http”
【发布时间】:2016-11-20 22:50:14
【问题描述】:

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

import * as http from 'http'; 

编译显示error TS2307: Cannot find module 'http'.

如何处理这个错误?

问候

【问题讨论】:

  • 我做到了。但我无法从文档中解决问题。
  • 如果您描述了您已经尝试过的内容,并且可以提供一个最小的工作示例,您将获得更好的答案以获得可用的答案。
  • 从文档一路走来。如果我使用var x = require('http'); 函数,则不需要找到。但我不明白这一点...... http 是节点中的默认模块。那么为什么打字稿不能处理呢?
  • 我在 WebStorm 中遇到了同样的问题,如果我在 typescript 中执行它不会找到模块,如果我在纯 Javascript 中执行它可以正常工作。

标签: typescript nodes visual-studio-code


【解决方案1】:

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

安装类型后:

typings install dt~node --global --save

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

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

突然间它起作用了。

【讨论】:

    【解决方案2】:

    这对我有用:

    npm install @types/node --save
    

    我意识到自从 OP 以来已经有一段时间了,但是这是一个更新的答案,以防有人偶然发现这个问题。

    【讨论】:

    • 我是 TypeScript 的新手。你能解释一下'@types/node'是什么意思吗?或者指出一个好的资源也会有所帮助。
    • @IndikaK @types/node 是一个包含 Node 运行时的 TypeScript 声明的包,在开发 TypeScript 时通常需要 @types/packageName 以便非 TypeScript 库在 TypeScript 中运行(所以你在编译时获取类型检查/提示)。 devblogs.microsoft.com/typescript/writing-dts-files-for-types 会比我能解释的更好地证明这个概念,但是请随时与任何问题联系!
    • 所需的类型也包含在其他类型的 @type/... 包中。我使用express 并安装@types/express 为我修复了它。
    • 它有效,但似乎我必须为每个新项目重复此操作。 VSCode 不能像完整的 VS 那样拥有某种“项目模板”,我只需单击“创建新的 NodeJS TypeScript 项目”,所有必要的 tsconfig、package.json、此依赖项等都会自动设置,以便我可以开始编写无需在控制台中重复这些繁琐的步骤即可立即编码?
    • @DamnVegetables 是的,您需要找到的是样板生成器。 github.com/w3tecch/express-typescript-boilerplate 或 NestJS CLI 之类的东西会很好用。 VSCode 也可以配置成这样(网上应该有教程)
    【解决方案3】:

    更新的解决方案

    在 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 代码使用类型声明信息为您提供类型安全的方式。

    @types:

    有一个社区维护的存储库,名为 DefinitiveTyped 包含许多新旧 Javascript 库的类型声明文件,例如 Express、Sequelize、JQuery 和许多其他库。当您在命令中指定@types 包时,这意味着您正在从DefinitelyTyped 存储库下载声明类型。

    -D 标志:

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

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

    -D 标志确保类型进入package.json 文件的devDependencies 部分而不是dependencies 部分。因为这个包只在开发中需要,而不是在生产中。不要使用其他答案中提到的--save 标志,因为它在package.jsondependencies 部分中添加了类型依赖项,并使用不必要的文件使服务器安装膨胀。

    就是这样!

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2021-01-07
      • 2013-12-30
      相关资源
      最近更新 更多