我以为我了解导入的工作原理,但今天发现我没有。
具有纯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
)。
但我知道我错了。你能修理我吗?
答案 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
。