我试图在打字稿中构建一个流畅的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很长很难维护。
答案 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类继承机制的限制。