【发布时间】:2016-09-05 16:40:19
【问题描述】:
考虑使用装饰器的相互依赖代码示例(如下)。
现在考虑以下工作流程(是的,我确实想传递实际导出的类,因为我以后需要使用它们):
- 应用导入并运行
Parent.ts -
@Test(Child)导致应用在装饰时导入Child.ts - 注意:代码尚未到达类
Parent - 在
Child.ts中,@Test(Parent)装饰器被执行 - 此时,
Parent未定义,无法传递给装饰器。
如您所见,存在令人讨厌的循环依赖,我看不到一种能够应用将类作为相互引用的参数的装饰器的方法。
请注意,为了简洁起见,我使用了@Test 作为示例。实际的装饰器是 @HasMany 和 @BelongsTo - 所以我这里有一个实际的用例。
我的问题是:“这个问题有解决方案吗?”
我担心没有,除非 TypeScript 的编译代码被更改,以便将装饰过程推迟到所有涉及的代码都被导入。
代码示例:
Decorators.ts:
export function Test(passedClass: Function): Function {
return function (model: Function): void {
console.log(typeof passedClass);
};
}
Parent.ts:
import {Child} from "./Child";
import {Test} from "./Decorators";
@Test(Child)
export class Parent {
}
Child.ts:
import {Parent} from "./Parent";
import {Test} from "./Decorators";
@Test(Parent)
export class Child {
}
【问题讨论】:
-
这不是递归,因为它是循环依赖。为什么每个班级都不能自己测试?
-
谢谢 - 循环引用 - 这是我所掌握的术语。为简洁起见,我将其命名为
@Test。实际上是@HasMany和@BelongsTo。
标签: javascript typescript undefined decorator circular-dependency