import http = require('http'); 的区别并从'http'导入\*作为http;?

新手上路,请多包涵

我还没有找到一个有价值的 NodeJS with Typescript 教程,所以我在无指导的情况下潜入水中,果然我有一个问题。

我不明白这两行之间的区别:

 import * as http from 'http';
// and
import http = require('http');

它们似乎以相同的方式运作,但我想它们的行为可能有一些细微差别,否则其中一个可能不存在。

我明白第一种方法可以让我有选择地从一个模块导入,但是如果我要导入所有模块,那么两者之间有区别吗?有首选方法吗?如果我从我自己的文件中导入,那会改变什么吗?

原文由 Corey Ogburn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

在第一种形式中,您在代码中创建一个 http 对象(完全干净),然后,解释器将在 http 模块中查找每个可能的导入,并将其逐个附加到代码中的 http 对象,这是一个比获取 http 模块中定义的 module.exports 对象的第二种形式稍慢(不多),然后将此引用复制到代码中的新 http 对象,这是具有特定上下文的节点特殊函数中的对象,不仅是在您的代码中创建的对象,还包含模块的内容。

原文由 André Claudino 发布,翻译遵循 CC BY-SA 3.0 许可协议

import http = require('http') //Common JS

这是 Common JS 模块。在 12.2 版本之前,这是在 node JS 中使用模块的唯一方式。

 import * as http from 'http'; //ES 6

这是 ES6 模块。在 ECMAScript 6 标准中,模块由 Javascript 原生支持。 Node JS 在 12.2 版本中实现了这个特性。

在这两者中,我总是更喜欢 ES6 模块,因为它是 javascript 实现的一部分。浏览器也支持 ES6 模块。但是浏览器不支持 Common JS,因为它是同步的。 AMD 模块在 ES 6 之前的浏览器中使用,因为它不像 CommonJS 是异步的

原文由 Sumeet Patond 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题