В этом уроке мы рассмотрим систему TypeScript-модулей, которая была создана до стандартизации ESM-модулей.
По умолчанию эта система совместима с Node.js-модулями — она использует идентичный алгоритм определения импортов и экспортов. С другой стороны, синтаксически эта система больше похожа на ESM, потому что мы используем ключевые слова import
и export
для импортирования в текущий модуль и экспорта из него, при этом остается валидным использование CommonJS-модулей. Посмотрим, как это работает на практике:
// @file helloWorld.ts
export default function helloWorld() {
console.log("Hello, world!");
}
// @file main.ts
import helloWorld from './helloWorld';
Как и в ESM-стандарте, Typescript также поддерживает именованный экспорт и импорт, а также импорт всего экспортированного через import * as smth from './somewhere'
.
Некоторые пакеты поставляют только типы. Для таких случаев есть специальный синтаксис, который позволяет отдельно импортировать и экспортировать типы:
// @file user.types.ts
export type User = { name: string };
// @file main.ts
import type { User } from './user.types';
Если модули решают проблему разнородных сущностей и коллизий с помощью разнесения кода по нескольким файлам, то механизм namespace
позволяет оставаться в рамках одного файла:
namespace Hello {
export function helloWorld() {
console.log("Hello, world!");
}
}
const helloWorld = Hello.helloWorld();
Больше всего этот механизм полезен авторам библиотек и оберток с типами. Они заключают все интерфейсы в один namespace
. Это гарантирует отсутствие коллизий имен и упрощает пользователям слияние интерфейсов. О последнем пункте поговорим в одном из следующих уроков курса.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.