Я оцениваю миграцию на TypeScript для большой базы кода в среде JavaEE. Существует несколько проектов с глубокой структурой каталогов и кодом JavaScript, в котором используются глобальные переменные и т.д. c. для всех проектов.
TypeScript имеет поддержку нескольких проектов, что иллюстрируется этим небольшим примером на GitHub . Однако мой случай более сложный.
(1) JS код размещается глубоко внутри проектов, например "Project1 / src / main / resources / de / mycompany / webapp / ts". Сгенерированный код JS должен быть помещен в «Project1 / src / main / resources / de / mycompany / webapp / ts-generate». Для этой цели TypeScript предлагает rootDir
и outDir
.
(2) Структура папок сложная, поэтому относительный импорт невозможен. Например, ссылка на файл из проекта core всегда должна быть одинаковой - независимо от того, сделана ли она из проекта ui или ui-utils project. TypeScript предлагает "baseUrl" и "paths" для абсолютных ссылок. Тем не менее, это не похоже на работу с несколькими проектами (или я что-то не так). Например, я хочу import * from '@core/utils/mycode.ts'
. Эту ссылку следует интерпретировать относительно core проекта *1022* baseUrl или rootDir .
(3) Я должен сделать ссылки на существующие JS код в глобальной области видимости. Для этой цели TypeScript предлагает файлы объявлений (.d.ts), которые можно использовать для предоставления компилятору дополнительной информации о типе. Таким образом, я планирую создать файлы объявлений для существующего JS кода. Затем объявления должны быть импортированы путем использования проектов TypeScript. Однако ключевое слово import в TypeScript, кажется, всегда импортирует объявления как module с пространством имен, что противоречит тому факту, что объекты JS привязаны к глобальной области видимости. Я также нашел Triple-Sla sh import , который, кажется, работает для относительных ссылок, но не для абсолютных ссылок на другие проекты.
Вопросы
Для (2): возможно ли иметь абсолютный импорт между проектами, предпочтительно из baseUrl или rootDir?
Для (3): можно ли импортировать (или ссылаться) объявления TypeScript из других проектов для JS код в глобальной области видимости. Обратите внимание, что это не должно генерировать какой-либо код, оно должно просто сообщать компилятору о существующем коде.