我有一个带有循环引用的打字稿项目,即。类A引用类B,类B引用类A.此外,还有包含export
语句的外部模块。我无法改变这些。
方法1
使用import语句:
import { ClassName } from './path/to/the/file';
这不允许循环引用。重写代码以避免循环引用对我来说不是一个选项。
方法2
有一个definitions.d.ts
文件引用项目中的每个文件,如下所示:
/// <reference path="path/to/the/file"/>
然后,在每个代码文件中,定义文件的引用方式相同。
此解决方案似乎允许循环引用。但是,具有export
语句的外部模块文件不能像这样引用,因此我需要使用import
语句。问题是,一旦文件使用import
语句,它似乎也成为一个模块,并且不能再使用/// <reference
指令引用。
什么是允许循环引用和外部模块的好项目结构?
编辑:将两个类放在同一个文件中就是我想要的。有没有办法实现相同的目的,同时为每个类保留一个单独的文件?
答案 0 :(得分:0)
尽管我觉得很烦人,但我将尝试通过提取接口来解决此问题。
我认为仅公开所需的方法/字段以使代码完成建议列表更整洁是一个优点:
export interface C {
...
}
A类现在实现C:
export class A implements C {
...
}
然后将类B改为引用C而不是A:
export class B {
private a : C;
// instead of private a : A;
}
答案 1 :(得分:-2)
你应该避免循环引用,没有很多好的选择和很多问题。一种方法应该是创建一个包含A类和B类的C类,避免A和B之间的内部引用,并在C类中实现混合功能。