如何在Typescript中检测循环依赖

问题描述

下面的代码有循环依赖问题。 A-> B-> A

可再现的问题:

/a.ts

import {B} from './b';
import { Service } from './test';
@Service
export class A {
    static id = 'A'

    constructor(b: B) {
    }
}

/b.ts

import {A} from './a';
import { Service } from './test';
@Service
export class B {
    static id = 'B'
    constructor(a: A) {
    }
}

/test.ts

export function Service(target: any) {
// purposefully empty 
}

/index.ts

import 'reflect-Metadata'
import {A} from './a'
import {B} from './b'

const paramTypesA = Reflect.getMetadata('design:paramtypes',A);
const paramTypesB = Reflect.getMetadata('design:paramtypes',B);


console.log('paramTypesA is',paramTypesA)
console.log('paramTypesB is',paramTypesB)

预期产量

paramTypesA is [ [Function: B] { id: 'B' } ]
paramTypesA is [ [Function: A] { id: 'A' } ]

实际输出

paramTypesA is [ [Function: B] { id: 'B' } ]
paramTypesB is [ undefined ]

问题:如何实现预期的输出

目标是检测循环依赖。但是我们也想知道到底是什么参数导致循环依赖。

如果反射元数据仅输出未定义,则不可能知道哪个参数引起循环依赖。

我已经检查了Detecting circular dependencies in TypeScript,但这没有帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)