考虑使用装饰器的相互依赖代码示例(如下)。
现在考虑以下工作流程(是的,我确实想传递实际导出的类,因为我稍后需要使用它们):
- 应用程序导入并运行
Parent.ts
-
@Test(Child)
导致应用程序导入Child.ts
装修时
- 注:班级
Parent
代码尚未到达
- In
Child.ts
, the @Test(Parent)
装饰器被执行
- 在此刻,
Parent
未定义,无法传递给装饰器。
正如您所看到的,存在令人讨厌的循环依赖关系,我看不到一种能够应用将类作为相互引用的参数的装饰器的方法。
请注意,我用过@Test
为简洁起见,举个例子。实际的装饰器是@HasMany
and @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(Parent)
by @Test(() => Parent)
.
而不是跟踪类构造函数(Parent
)在元数据中,我跟踪返回构造函数的 thunk(() => Parent
)。这会延迟评估Parent
导入的变量直到调用 thunk 为止,这就达到了目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)