TypeScript. Модули

Концепция модулей впервые появилась в стандарте 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';