Чтобы это понять, вы должны изучить историю модулей в JavaScript. Язык имеет только официальную поддержку модуля в самой последней версии, и не все браузеры поддерживают эту функцию. Вот список хороших статей.
http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html https://addyosmani.com/writing-modular-js/
Чтобы ответить на ваш вопрос, то первый тип используется для внутренних модулей (в настоящее время переименованы в пространствах имен). Вы бы использовали их, если у вас несколько исходных файлов, но они будут скомпилированы в один файл (с использованием опции компилятора outFile).
Второй тип - новый синтаксис модуля ES6. Вы использовали бы это в исходном коде, но на данный момент должны быть скомпилированы либо синтаксисом AMD, либо CommonJS или SystemJS (который следует стандарту ES6).
Оставшиеся синтаксис модуля AMD, define
используется для определения модуля, который будет экспортировать некоторый код. require
используется для импорта модулей, которые будут использовать ваш код. Вы не можете экспортировать какой-либо код с помощью require
, поэтому вы обычно используете его только один раз для основного файла сценария.
С текущими версиями машинопись, вы бы не использовать AMD или CommonJS синтаксис, можно использовать стандартный синтаксис модуля ES6 и ваш компилятор затем компилировать его в соответствующий тип модуля согласно module
собственности в файле tsconfig.json
.