Не удается разрешить импорт из index.ts из сценария, расположенного в том же каталоге
Я работаю над угловым 2 проектом, написанным на TypeScript 2, и в настоящее время я сталкиваюсь с проблемой с механизмом импорта.
В каждой подпапке моего проекта есть файл index.ts, который экспортирует классы, которые содержит указанная папка.
Итак, в моем каталоге "app" у меня есть
- app.component.ts
- app.module.ts
- app.routes.ts
И затем, файл index.ts, содержащий:
export * from './app.component';
export * from './app.module';
export * from './app.routes';
Моя проблема в том, что я не могу импортировать экспортированные классы из файла, который находится в этом же каталоге.
Например, в моем app.module.ts я хочу импортировать компонент приложения. Если я сделаю:
import { AppComponent } from './app.component';
Все отлично работает! Нет ошибок во время компиляции и во время выполнения. Жизнь это круто, жизнь прекрасна.
Но я не могу сделать следующее:
import { AppComponent } from '.'; // or './', or even './index'
IDE (Visual Studio) фактически разрешает импорт правильно (компилируется без ошибок). Я даже получаю автозаполнение от Intellisence...
Но я получаю эту ошибку во время выполнения:
Error: Unexpected value 'undefined' imported by the module 'AppModule'
И я просто не знаю почему.
Примечание. У меня нет ошибок при импорте из index.ts из подпапок (например, я могу выполнить импорт из "./core", который также имеет индекс).
Заранее спасибо:)
3 ответа
У меня была точно такая же проблема.
Кажется, у вас круговая зависимость.
Когда вы пишете это:
import { AppComponent } from '.';
решатель переходит к index.ts
и видит это:
export * from './app.component';
так что тогда идет к ./app.component
и видит это:
import { AppComponent } from '.';
так что идет к index.ts
и видит это:
export * from './app.component';
И так далее...
Странно, что вы не получаете предупреждений, и, в зависимости от загрузчика, он может действительно корректно разрешиться второй раз (так что в первый раз вы получаете неопределенное значение, но при последующих вызовах он разрешается правильно) - я потратил 4 часа из-за гораздо менее очевидная круговая зависимость. Я настоятельно утверждаю, что машинопись должна выдвигать предупреждение об этих вещах, потому что это правильная банка червей.
Чтобы избежать круговой зависимости, просто не надо:
import { SomeClass } from './path/to/index';
Вместо этого используйте прямой путь к файлу:
import { SomeClass } from './path/to/some-class';
Это не относится к модулям, которые вы импортируете из node_modules
,
Это может быть резкое сообщение об ошибке. У вас установлен резарпер? Вы можете отключить его и попробовать еще раз?
Если это ошибка резче, установите версию Typescript в опциях Resharper.
У меня была версия Resharper для 9.x, и я получил только Typescript 1.6. Мне пришлось обновить до 10.x, чтобы добраться до 2.0.