Концепция модулей впервые появилась в стандарте ECMAScript 2015. Модули позволяют разбить сложное приложение на отдельные файлы, в каждом из которых содержится строго определенный функционал, а после, с помощью импортирования, собрать их воедино. Переменные, классы, функции, объявленные в модуле, не доступны извне этого модуля, если они не экспортируются с помощью команды export
. А для того, чтобы использовать экспортированные части в другом модуле, нужно их импортировать, воспользовавшись командой import
.
Экспорт
Любое объявление можно экспортировать с помощью ключевого слова export
:
// экспорт константы:
export const pi = 3.1415926535897932384626433832795;
// экспорт функции:
export function areaOfACircle(radius: number): number {
return pi*radius**2
}
Можно экспортировать и ранее объявленную переменную. Для этого ее название нужно указать после ключевого слова export
в фигурных скобках:
let a = 1;
export { a };
Можно экспортировать несколько переменных:
let a = 1, b = 2;
export { a, b };
И экспортировать под другими именами, используя ключевое слово as
:
let a = 1, b = 2;
export { a as A, b as B };
При этом у экспортируемых переменных, функций, классов должны быть имена. Так экспорт анонимной функции вызовет ошибку:
export function() { console.log('Ошибка') }; // Ошибка: Identifier expected
Импорт
Подключить экспортируемую функциональность модуля можно с помощью ключевого слова import
:
import { A, B } from './configs';
Названия импортируемых переменных должно совпадать с названиями экспортируемых. Но можно импортировать и с другим именем, задав его с помощью as
:
import { A as a, B as b } from './configs';
А также можно импортировать все экспорты модуля в один объект:
import * as configs from './configs';
let a = configs.A;
Экспорт по умолчанию
С помощью ключевого слова default
можно делать экспорт по умолчанию:
export default class User {
constructor(public name) {}
};
Тогда конструкция для импорта используется без фигурных скобок:
import User from './user';
Реэкспорт
В модуле можно выполнить реэкспорт функционала какого-то другого модуля при помощи конструкции export .. from
. При этом локально импорт не производится и переменная не создается:
export {a as b} from './configs';