Skip to content

Circular Dependencies (Classes)

// ClassA depends on ClassB
export class ClassA implements IClassA {
constructor(private classB: IClassB) {}
methodA(): string {
return 'ClassA calling: ' + this.classB.methodB();
}
}
// ClassB depends on ClassA
export class ClassB implements IClassB {
constructor(private classA: IClassA) {}
methodB(): string {
return 'ClassB calling: ' + this.classA.methodA();
}
}

The Cycle: ClassAIClassB (ClassB) → IClassA (ClassA) → impossible to instantiate!

Terminal window
Error: Circular dependency detected in the dependency graph.
Circular dependency chain:
ClassA IClassB (ClassB) → IClassA (ClassA)
Classes involved:
- ClassA (/path/to/services/ClassA.ts)
- ClassB (/path/to/services/ClassB.ts)
⚠️ Fix: Refactor your code to break the circular dependency.

Extract Common Service:

// ✅ Both depend on SharedService (no cycle!)
class SharedService {
doSomething(): string {
return 'shared logic';
}
}
class ClassA {
constructor(private shared: SharedService) {}
}
class ClassB {
constructor(private shared: SharedService) {}
}

Dependency Graph:

ClassA → SharedService
ClassB → SharedService
(No circular dependency!)