TypeScript和JS模块导入误解

时间:2018-12-07 11:33:44

标签: typescript ecmascript-6 node-modules ecmascript-5

我以为我了解导入的工作原理,但今天发现我没有。

具有纯JavaScript模块,例如:

function MyClass() { ... }

util.inherits(MyClass, EventEmitter);

MyClass.prototype.someMethod = funtion(x) { ... }

...

module.exports = MyClass;

现在我正在TypeScript文件中导入该模块(因为我认为它使用与ES6 import相同的语法),并发现这可行:

import * as MyWebSocket from '../utils/websocket';

而且-不:

import MyWebSocket from '../utils/websocket';

这也不起作用:

import { MyWebSocket } from '../utils/websocket';

据我了解,如果模块使用import X from Y关键字(和相等的ES5语法为default)导出模块,则export default X应该可以工作。如果导出的内容不是默认值,则module.exports = X应该可以工作(类似的ES5语法是import { X } from Y)。

但我知道我错了。你能修理我吗?

1 个答案:

答案 0 :(得分:0)

module.exports = something不是ES5语法,实际上ES5 Spec中没有“模块”。该模块系统称为Node.JS采用的CommonJS。

要使import X from Y中的module.exports = X在TypeScript中工作,应启用esModuleInterop: true,否则,必须使用import * as X from Y