Typescript 1.8 modules: импортировать все файлы из папки

Я создаю большую библиотеку с Typescript с похожими 100 отдельными ts файлами. Раньше я использовал модуль экспорта XXX (переименованный в пространство имен экспортеров XXX позже) для всех моих классов, но, как говорят книги, это не рекомендуется, я должен использовать импорт вместо этого.

Итак, я попытался импортировать. Это отлично работает:

import * as mylib from "./source/source.ts";

Но поскольку у меня есть 100 файлов, я не хочу добавлять такую ​​строку для всех из них. И я хочу, чтобы все мои классы были доступны через переменную mylib.

Итак, я пробовал это:

import * as mylib from "./source/";

Но как только я это сделаю, я получаю: Не могу найти модуль './source/'

Есть ли способ импортировать все классы из папки с несколькими файлами с одной строкой?

Ответ 1

Обе стратегии разрешения модулей, которые предоставляет tsc, не поддерживают такое поведение. Какой желаемый оператор импорта

import * as mylib from "./source/";

на самом деле состоит в выполнении проверок в следующем порядке:

1. (does package.json have a typings key? If so, import this file)
2. import * as mylib from "./source/index.ts";
3. import * as mylib from "./source/index.tsx";
4. import * as mylib from "./source/index.d.ts";

Я предполагаю, что вы используете здесь node -стильный модуль, который, вероятно, существует с тех пор, как это рекомендуется. Проверьте typescript docs для получения более подробной информации о том, как разрешено разрешение модуля в typescript.

Обычно то, что вы пытаетесь выполнить, - это создать файл index.d.ts, который служит точкой входа, из которой вы экспортируете остальные модули. Я использую angular2 в качестве примера: Общий общий импорт angular2 выглядит следующим образом:

import { Injectable } from '@angular/core'

core - это просто каталог, который находится внутри каталога @angular. Также как ваш каталог source. Однако в основной директории находится файл index.d.ts:

/**
 * @module
 * @description
 * Starting point to import all public core APIs.
 */
export * from './src/metadata';
export * from './src/util';
export * from './src/di';
....