Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测Typescript中的循环依赖关系_Javascript_Typescript_Dependency Injection_Circular Dependency_Reflect Metadata - Fatal编程技术网

Javascript 如何检测Typescript中的循环依赖关系

Javascript 如何检测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

下面的代码存在循环依赖性问题。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: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 ]