Circular Dependency

대부분 언어에서 발생할 수 있는 문제

import { b } from './const-b';
console.log({ b });

export const a: number = b + 1;
import { a } from './const-a';
console.log({ a })

export const b: number = a + 1;
import { a } from './const-a';

console.log(`result: ${a}`);
{ a: undefined }
{ b: NaN }
result: NaN

a.ts는 b.ts가 필요하고 b.ts는 a.ts가 필요한 상황

Class

import { Y } from './class-y';

export class X {
  public static sample() { return new Y(); }
}
import { X } from './class-x';

console.log({ X });
const x = new X();

export class Y {
  public static sample() { return x; }
}
import { X } from './class-x';
console.log(X);
{ X: undefined }
\\class-y.js:4
var x = new class_x_1.X();
        ^

TypeError: class_x_1.X is not a constructor
    at Object. (\\class-y.js:4:9)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object. (\\class-x.js:3:17)
    at Module._compile (internal/modules/cjs/loader.js:778:30)

Reference