Для чего используются все index.ts?

Я смотрел несколько проектов с семенами, и все компоненты, похоже, имеют index.ts, которые экспортируют * из этого компонента. Я не могу найти нигде, для чего он действительно использовался?

Например, https://github.com/mgechev/angular2-seed/tree/master/src/client/app/%2Bhome

Спасибо

Ответ 1

Из записи архивного глоссария для Barrel *:

Бочка - это способ объединения экспорта из нескольких модулей в один удобный модуль. Сам ствол представляет собой файл модуля, который реэкспортирует выбранный экспорт других модулей.

Представьте себе три модуля в папке героев:

// heroes/hero.component.ts
export class HeroComponent {}

// heroes/hero.model.ts
export class Hero {}

// heroes/hero.service.ts
export class HeroService {}

Без бочки потребителю потребовалось бы три заявления на импорт:

import { HeroComponent } from '../heroes/hero.component.ts';
import { Hero }          from '../heroes/hero.model.ts';
import { HeroService }   from '../heroes/hero.service.ts';

Мы можем добавить бочку в папку героев (по соглашению называется индексом) который экспортирует все эти элементы:

export * from './hero.model.ts';   // re-export all of its exports
export * from './hero.service.ts'; // re-export all of its exports
export { HeroComponent } from './hero.component.ts'; // re-export the named thing

Теперь потребитель может импортировать то, что ему нужно, из бочки.

import { Hero, HeroService } from '../heroes'; // index is implied

Каждый пакет с angular областью имеет бочку с именем index.

См. также Ошибка angular цифрового входа - ИСКЛЮЧЕНИЕ: невозможно разрешить все параметры


* ПРИМЕЧАНИЕ. Barrel был удален из более поздних версий Angular глоссария.

Ответ 2

index.ts аналогичен index.js в nodejs или index.html является хостингом веб-сайта.

Поэтому, когда вы скажете import {} from 'directory_name', он будет искать index.ts внутри указанного каталога и импортировать туда все, что там экспортируется.

Например, если у вас calculator/index.ts как

export function add() {...}
export function multiply() {...}

Вы можете сделать

import { add, multiply } from './calculator';

Ответ 3

index.ts помогает нам сохранять все связанные вещи вместе, и нам не нужно беспокоиться об имени исходного файла.

Мы можем импортировать все, используя имя исходной папки.

import { getName, getAnyThing } from './util';

Здесь util - это имя папки, а не имя файла с index.ts, который реэкспортирует все четыре файла.

export * from './util1';
export * from './util2';
export * from './util3';
export * from './util4';