es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

image

¡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?

Tags:  , ,

Answer

  1. Avatar for 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 como import { 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 carpeta lib, de esta manera: "baseUrl": "./". Entonces, las rutas se pueden actualizar a import { 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 carpeta lib, de esta manera: "../../lib/*": ["../lib/*"]. Esto asegura que las rutas como import { 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.

Comments are closed.