Недопонимание импорта в TypeScript и JS-модуль - PullRequest
0 голосов
/ 07 декабря 2018

Я думал, что понимаю, как работает импорт, но сегодня обнаружил, что у меня нет.

Имею чистый модуль JavaScript, такой как:

function MyClass() { ... }

util.inherits(MyClass, EventEmitter);

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

...

module.exports = MyClass;

И теперь я импортирую этот модуль в файл TypeScript(как я думал, он использует тот же синтаксис, что и импорт ES6) и обнаружил, что это работает:

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

И это - не:

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

Также это не работаетлибо:

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

Как я понимаю, import X from Y должен работать, если модуль экспортирует что-то с ключевым словом default, например export default X (и равным синтаксису ES5 является module.exports = X).И import { X } from Y должен работать, если экспортировать что-то не по умолчанию (и синтаксис ans similat ES5 равен module.exports = { X }).

Но я вижу, что ошибаюсь.Не могли бы вы исправить меня?

1 Ответ

0 голосов
/ 20 декабря 2018

module.exports = something НЕ является СИНТАКСОМ ES5, на самом деле в ES5 Spec нет "модуля".Эта модульная система называется CommonJS, которая принята Node.JS.

Чтобы import X from Y из module.exports = X работал в TypeScript, вы должны включить esModuleInterop: true, в противном случае вы ДОЛЖНЫ использовать import * as X from Y.

...