Импорт типов машинописных текстов за пределами src в React

#node.js #reactjs #typescript

#node.js #reactjs #typescript

Вопрос:

В последнее время я работал над React Express проектом, который имеет структуру файла проекта, подобную этой:

 Repo
  |--ExpressApp
      |--src/..
  |--Common
      |--types.ts
  |--ReactApp
      |--src/..
  

Таким образом, приложение Express находится в ExpressApp папке, приложение react — в ReactApp папке, а внутри Common находится набор Typescript типов, которые совместно используются приложениями Express и react.

Приложение react — это create-react-app проект, и я прочитал проблемы, связанные с импортом файлов, которые находятся за пределами каталога src react apps. Однако в приложении React я, кажется, могу импортировать типы, указанные из Common/types.ts , в приложение React без каких-либо проблем.

 /** Common/types.ts */

// This imports ok to React app even though its outside of the src directory
export type Person {
 id: string,
 name: string,
 role: string
};

// This does not import into React app, as it is outside of the source directory
export const smapleFunction = () => {
  ...
}
  
 /** ReactpApp/src/app.ts */

// This is accepted by React
import { Person } from '../../common/types';

// This is not accepted by React
import { sampleFunction } from '../../common/types';

  

Если бы я экспортировал функцию из файла Common/types.ts и использовал ее в приложении React, то react выдает ожидаемую ошибку о том, что файлы должны находиться в каталоге src — однако при импорте типов, интерфейсов и т.д. проблем не обнаружено.

Не мог бы кто-нибудь, пожалуйста, объяснить, почему это работает для типов typescript, находящихся за пределами src, но не для функций или других модулей? Я предполагаю, что это как-то связано с тем, как Typescript обрабатывается в проекте CRA, но я не совсем понимаю процесс?

Комментарии:

1. Код может находиться за пределами src/ и все еще быть импортирован / скомпилирован. Отображение путей поддерживает это. Практический пример: четкая реакция . Я автор.

2. @winwiz1 Это, кажется, работает, но вывод /dist папки имитирует структуру папок monorepo вместо корневого проекта. Если это имеет смысл, есть идеи?

Ответ №1:

Типы и интерфейсы не компилируются, поэтому они по существу удаляются в качестве первой части процесса сборки, и сборка может продолжаться. Но остальная часть процесса сборки зависит от всего кода, существующего в src папке, а общий функциональный код (который компилируется) не существует в этом каталоге.