Контейнер - это способ объединения экспорта из нескольких модулей в один удобный модуль. Сам контейнер представляет собой файл модуля, который реэкспортирует выбранные экспортные данные других модулей.
Представьте себе следующую структуру классов в библиотеке:
// demo/foo.ts
export class Foo {}
// demo/bar.ts
export class Bar {}
// demo/baz.ts
export class Baz {}
Без контейнера потребителю потребовалось бы три оператора импорта:
import { Foo } from '../demo/foo';
import { Bar } from '../demo/bar';
import { Baz } from '../demo/baz';
Вместо этого вы можете добавить контейнер demo/index.ts
, содержащий следующее:
// demo/index.ts
export * from './foo'; // реэкспортируем весь экспорт
export * from './bar'; // реэкспортируем весь экспорт
export * from './baz'; // реэкспортируем весь экспорт
Теперь пользователь может импортировать из контейнера все, что ему нужно:
import { Foo, Bar, Baz } from '../demo'; // подразумевается demo/index.ts
Вместо экспорта *
вы можете выбрать экспорт модуля по имени. Например, предположим, что у baz.ts
есть следующие функции:
// demo/foo.ts
export class Foo {}
// demo/bar.ts
export class Bar {}
// demo/baz.ts
export function getBaz() {}
export function setBaz() {}
Если вы предпочитаете не экспортировать getBaz
/ setBaz
из примера, вы можете сначала импортировть и поместить их в переменную, а потом уже экспортировать эту переменную, как показано ниже:
// demo/index.ts
export * from './foo'; // реэкспортируем весь экспорт
export * from './bar'; // реэкспортируем весь экспорт
import * as baz from './baz'; // импортировать как общую переменную
export { baz }; // экспортировать эту переменную
А теперь импорт будет выглядеть так:
import { Foo, Bar, baz } from '../demo'; // подразумевается demo/index.ts
// использование
baz.getBaz();
baz.setBaz();
// и т.д ...