如何在工作区之间使用导入

问题描述 投票:0回答:1

错误 TS6202:项目引用可能无法形成圆形图。

我的结构: - 包 --utils --api

utils/tsconfig.json

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

api/tsconfig.json

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

我需要在api包中使用utils并在utils中使用一些api

typescript tsconfig workspace
1个回答
0
投票

循环依赖通常是一个暗示,表明你的架构还不完善。

尝试以下一项或多项:

  1. 创建第三个包,两者都依赖于该包,并将两者所需的东西升级到更高层。
  2. 添加额外的抽象。例如,如果类“A”(来自 api)需要类“U”(来自 util)并且类 U 也需要类 A,则为更通用的类的更相关部分创建一个接口。从你的名字来看,util 很可能不依赖于 API。

示例:

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

在此设置中,api 中的 A 取决于 util 中的 U,反之亦然。要解决此问题,请创建一个接口,从 U 的角度描述所需的功能并使其依赖于此:

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

这样,util就不需要依赖api,而是通过提供接口来定义它需要操作什么。然后,来自 api 的更具体的类 A 实现了该接口,以表明它可以满足 U 类的需求。

提示:还要考虑依赖注入等概念。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.