使用 TypeScript 导入节点模块

Posted

技术标签:

【中文标题】使用 TypeScript 导入节点模块【英文标题】:Importing node-modules with TypeScript 【发布时间】:2013-08-25 01:39:33 【问题描述】:

我正在尝试让它工作,但我似乎无法在 SO 上的任何地方找到解决方案。尝试编译此单文件应用程序时:

import http = require('http')
http.createServer(function (req, res) 
  res.writeHead(200, 'Content-Type': 'text/plain');
  res.end('Hello World\n');
).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

使用命令“tsc app.ts --module 'commonjs'”我得到以下错误(不使用 --module 标志会给我一个额外的错误,告诉我我需要它来编译外部模块):

error TS2071: Unable to resolve external module '"http"'.
error TS2072: Module cannot be aliased to a non-module type.

【问题讨论】:

尝试var 而不是importvar http = require('http') 给我error TS2095: Could not find symbol 'require'.。我见过的所有示例都使用import 声明。 如果您使用 var,您的导入将无法正确输入。 @Shoerob 您能否详细说明您的评论。你的意思是如果我们使用 'var' 而不是 'import',intelliSense 就不能工作了吗? 【参考方案1】:

TypeScript 需要知道 http 存在。

更新

为节点安装类型定义:

npm install @types/node

旧答案

遵循这两个步骤

从这里下载node.d.ts 文件:https://github.com/borisyankov/DefinitelyTyped/tree/master/node

在文件顶部添加:

/// <reference path="node.d.ts" />

PS:查看示例测试文件:https://github.com/borisyankov/DefinitelyTyped/blob/master/node/node-tests.ts

【讨论】:

我现在摸不着头脑,因为我确定我已经尝试添加引用路径。我什至把它放在我的文件夹里。无论如何,它现在可以工作了,谢谢! 很高兴您没有发布包含参考的代码。这将变得难以追踪;) @basarat 我复制了您指向的 node.d.ts 文件,但它在 .d.ts 文件中抛出了大量“文件未找到错误” - 特别是对于像“crypto”这样的文件“网”和“流”。你能指点我这些文件还是 node.d.ts 的稳定版本 @basarat 我在这里问过一个问题:***.com/questions/20437808/… 所有到 Github 的链接都已损坏。这个答案仍然有效吗?【参考方案2】:

不应该是这样的

/// <reference path="node.d.ts" />
import http = module('http')

我的意思是,你不应该使用module 而不是require 吗?

【讨论】:

module 被弃用,或require 与生成的 js 更一致 如何使用已经用 Typescript 编写的模块?它需要一个定义文件吗?我也在这里问过这个问题:***.com/questions/23175152/… @basarat 在打字稿的上下文中不是“模块”和“要求”分开的。我认为“模块”适用于内部模块,“需求”适用于外部模块。 没有。 module 已被弃用很长时间。它的import/require【参考方案3】:

我发现我在 tsconfig.json 文件中将 noResolve 设置为 true。这导致对我在 TypeScript 文件顶部包含的 .d.ts 文件的引用出现错误。

【讨论】:

以上是关于使用 TypeScript 导入节点模块的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有节点模块自动安装@types

Typescript 从节点模块导入 ts 文件

如何让 TypeScript 对扩展从“节点模块”导入的类感到满意?

如何使用 Typescript、React 和 Webpack 导入 SCSS 或 CSS 模块

如何从节点模块导出 Typescript 接口?

如何让 TypeScript 以生成工作 Node.JS 代码的方式加载 PDF.js NPM 模块和 @types 绑定?