Búsqueda de sitios web

typescript - Cómo usar importaciones entre espacios de trabajo


Error TS6202: Las referencias del proyecto no pueden formar un gráfico circular.

Mi estructura: -paquetes --utilidades --api

utils/tsconfig.json

...
references: [../api/src]

api/tsconfig.json

...
references: [../utils/src]

Necesito usar utilidades en el paquete api y usar algunas api en las utilidades

Respuesta #1

Las dependencias circulares suelen ser una señal de que tu arquitectura aún no es sólida.

Prueba uno o varios de los siguientes:

  1. Crea un tercer paquete, del cual dependan ambos y eleva las cosas necesarias para ambos a la capa superior.
  2. Agrega una abstracción adicional. Si, por ejemplo, la clase "A" (de la API) necesita la clase "U" (de util) y la clase U también necesita la clase A, crea una interfaz para las partes más relevantes de la clase más general. Por tu nombre, util probablemente no debería depender de la API.

ejemplo :

// in api
class A {
  constructor(private u: U) {}
  fancyMethod() {}
}
// in util
class U {
  constructor(private a: A) {}
}

En este entorno A de la API depende de U de util y viceversa. Para resolver esto, crea una Interfaz que describa la funcionalidad requerida desde el punto de vista de U y haz que dependa de eso:

// in api
class A implements FancyIf{
  constructor(private u: U) {}
  fancyMethod() {}
}
// in util
interface FancyIf {
  fancyMethod(): void;
}
class U {
  constructor(private a: Fancy) {}
}

De esta manera, util no necesita depender de api, sino que define lo que necesita para operar proporcionando una interfaz. La clase más específica A de api luego implementa la interfaz para indicar que puede cumplir con las necesidades de la clase U.

Pista: También piensa en conceptos como la inyección de dependencias.