SystemJS中的TypeScript继承和循环依赖

Eri*_*ric 4 circular-dependency typescript ecmascript-6 systemjs es6-module-loader

--module system在一个非常大的项目中使用TypeScript和(SystemJS).SystemJS支持循环依赖,并且大多数时候它工作正常.但是,当涉及到TypeScript继承时,事情就会开始破坏.

例如,如果a class A依赖于class B,并且class B 继承class A,则class A首先加载:

  1. 它将暂停class A's解决并尝试加载class B依赖项
  2. class B因为class A被触及了,所以会认为它的依赖关系得到了解决.
  3. class B's继承将无法解决,因为class A仍未定义.

我可以在网上找到与模块加载器的循环依赖关系的大多数"解决方案":

  • 将您的设计/组合类更改为单个模块
  • CommonJS和非TypeScript特定的解决方法

我觉得循环设计有合理的理由,并且将类合并到巨型文件中并不总是可取的,所以请考虑这些变通方法是我要问的问题.

有没有解决实际问题的方法?

Ber*_*rgi 6

改变您的设计是最有利的解决方案.类不应该依赖于它的子类.如果您在工厂中使用它们,这是一个单独的问题,应该在单独的类/功能/模块中.

有没有解决实际问题的方法?

正如您所说,只有在首先加载模块A时才会出现问题.解决方案是防止这种情况,并在以正确的顺序导入它们的同时编写一个额外的模块作为A及其所有子类的代理.