Haciendo referencia a tipos en monorepo en un directorio hermano (yendo por debajo de la raíz).
¿Alguien sabría cómo ayudar a resolver un problema de referencias de tipos en un proyecto monorepo de TypeScript? ¿O si es incluso posible en la siguiente configuración?
La estructura es como sigue:
.
├── tsconfig.json
├── lib/
│ └── workers/
│ ├── types.ts
│ ├── hello.ts
│ └── tsconfig.json
└── frontend/
├── tsconfig.json
└── openwcMiniflare.ts
donde frontend/tsconfig.json
referencia los tipos como import { WorkerMethods, WorkerEvents } from 'workers/types';
con una configuración como la siguiente (partes relevantes, fuente completa aquí):
{
"compilerOptions": {
"composite": true,
"baseUrl": ".",
"outDir": "./out-tsc",
"sourceMap": true,
"rootDir": "./",
"paths": {
"workers/*": ["../lib/workers/*"]
},
}
"references": [
{ "path": "../lib/workers" }
]
}
workers/types.ts
export type WorkerMethods = {
sum: (x: number, y: number) => number;
mul: (x: number, y: number) => number;
};
export type WorkerEvents = {
ping: string;
};
No entiendo cómo VS Code muestra el siguiente mensaje de error y, de hecho, parece que los tipos no están definidos durante el tiempo de ejecución.
¡PERO! Si cambio la definición a import { WorkerMethods, WorkerEvents } from '../../lib/workers/types';
, entonces el mensaje de error indica que están fuera de rootDir
.
¿Es posible una estructura como esta en VS Code?
davy.ai
Es posible hacer referencia a tipos en un proyecto de monorepo de TypeScript, pero puede ser difícil obtener la configuración correcta. En la estructura dada, el archivo
frontend/tsconfig.json
está configurado para usar rutas comoimport { WorkerMethods, WorkerEvents } from 'workers/types';
, que se mapean a../lib/workers/types.ts
gracias a la configuración de"paths"
. Sin embargo, el prefijo../
está fuera de la configuración de"rootDir"
, lo que produce el mensaje de error en VS Code.Una posible solución es modificar la configuración de
"baseUrl"
para incluir la carpetalib
, de esta manera:"baseUrl": "./"
. Entonces, las rutas se pueden actualizar aimport { WorkerMethods, WorkerEvents } from 'lib/workers/types';
, y el mensaje de error debería desaparecer.Otra opción es mantener la configuración actual y definir una entrada de
"paths"
que mapee el prefijo../../
a la carpetalib
, de esta manera:"../../lib/*": ["../lib/*"]
. Esto asegura que las rutas comoimport { WorkerMethods, WorkerEvents } from 'workers/types';
sigan funcionando, aunque estén técnicamente fuera de la configuración de"rootDir"
.Ambas soluciones requieren ajustar los archivos de configuración para que las rutas y las configuraciones de
"rootDir"
coincidan, pero una vez hecho esto, hacer referencia a tipos en diferentes carpetas en un monorepo debería funcionar como se espera.