允许在Typescript中使用循环引用和导入的模块

时间:2017-10-31 16:37:49

标签: typescript import module

我有一个带有循环引用的打字稿项目,即。类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指令引用。

什么是允许循环引用和外部模块的好项目结构?

编辑:将两个类放在同一个文件中就是我想要的。有没有办法实现相同的目的,同时为每个类保留一个单独的文件?

2 个答案:

答案 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类中实现混合功能。