父类和子类之间的交叉引用

时间:2016-05-06 08:10:40

标签: typescript

我试图在打字稿中构建一个流畅的API库,我有2个类,在不同的文件中,相互引用如下:

a.ts

import * as b from "./b"

export abstract class A {
    static create(n: number) : A {
        return new b.B(n);
    }
}

b.ts

import * as a from "./a"

export class B extends a.A {
    constructor(n: number) { 
        super();
    }
}

我的申请是:

app.ts

import * as a from "./a"

a.A.create(1);

我已经设置了Visual Studio Code在本地Node上运行它,但是我得到了#34;无法读取未定义的原型"在生成的b.js的这一行:

d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());

有没有办法解决这种循环初始化依赖?

**编辑**

我找到的唯一解决方法是将B放在与A相同的文件中(B无论如何都不必导出)。

我的问题是会有C,D,E等类,这使得A.t很长很难维护。

1 个答案:

答案 0 :(得分:0)

解决方案是在app.ts中手动指定导入顺序:

import "./b";  // Manually import `b.ts` before `a.ts` 
import * as a from "./a";

a.A.create(1);

我不确定问题是否会通过未来版本的Node.js解决,这些版本将实现import / export的ES6语法。也许这是ES6类继承机制的限制。

相关问题