Skip to content

Circular Dependencies (Modules)

{
"modules": {
"ModuleA": ["services/ServiceA.ts"],
"ModuleB": ["services/ServiceB.ts"]
}
}
// ServiceA (ModuleA) depends on ServiceB (ModuleB)
export class ServiceA implements IServiceA {
constructor(private serviceB: IServiceB) {}
doSomething(): string {
return 'A: ' + this.serviceB.doSomething();
}
}
// ServiceB (ModuleB) depends on ServiceA (ModuleA)
export class ServiceB implements IServiceB {
constructor(private serviceA: IServiceA) {}
doSomething(): string {
return 'B: ' + this.serviceA.doSomething();
}
}

The Cycle: ModuleAModuleBModuleAimpossible to load!

Terminal window
Error: Circular dependency detected between modules.
Module dependency chain:
ModuleA ModuleB ModuleA
Detailed circular dependency:
ServiceA (ModuleA) → IServiceB (ServiceB in ModuleB) → IServiceA (ServiceA in ModuleA)
Modules involved in circular dependencies:
- ModuleA: services/ServiceA.ts
- ModuleB: services/ServiceB.ts

Merge modules or extract common dependency:

// ✅ Extract shared service
class SharedService {
doSomething(): string {
return 'shared logic';
}
}
// ModuleA
class ServiceA {
constructor(private shared: SharedService) {}
}
// ModuleB
class ServiceB {
constructor(private shared: SharedService) {}
}