Javascript 如何检测Typescript中的循环依赖关系
下面的代码存在循环依赖性问题。A->B->A 再现性问题: /a、 ts /b、 ts /test.tsJavascript 如何检测Typescript中的循环依赖关系,javascript,typescript,dependency-injection,circular-dependency,reflect-metadata,Javascript,Typescript,Dependency Injection,Circular Dependency,Reflect Metadata,下面的代码存在循环依赖性问题。A->B->A 再现性问题: /a、 ts /b、 ts /test.ts export function Service(target: any) { // purposefully empty } /索引 import 'reflect-metadata' import {A} from './a' import {B} from './b' const paramTypesA = Reflect.getMetadata('design:paramtype
export function Service(target: any) {
// purposefully empty
}
/索引
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)
预期产量
实际产量
问题:如何实现预期产出
目标是检测循环依赖关系。但我们还想知道是什么参数导致了循环依赖
如果reflect metadata only输出未定义,则不可能知道哪个参数引发循环依赖
我已经检查过了,但这没有帮助如果您更改导入顺序,输出将是什么?所以交换导入A和B。我已经尝试过了,实际输出是
paramTypesA是[undefined]paramTypesB是[[Function:A]{id:'A'}]
。然而,预期的输出仍然应该是paramTypesA是[[Function:B]{id:'B'}]paramTypesA是[[Function:A]{id:'A'}]
,在这种情况下,在我看来,TS可以处理循环依赖关系。因此,问题出在反射元数据中。也许这个答案可以帮助您,因为您说过“目标是检测循环依赖性”:
export function Service(target: any) {
// purposefully empty
}
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 ]