0

我有几个 model.ts 文件。当我使用 httpClient 时,我得到了一个 JSON 对象,但它不能正常工作,因为我必须反序列化它们:How to recursively init class get by httpclient

但从那时起,我找到了“类转换器”项目,它可以帮助我反序列化我的所有模型。我的服务有:

public method(cli: any): Observable<A> {
    const formData = new FormData();
    formData.append('cli', JSON.stringify(cli));
    return this.http.post<A>('/my/url',
        formData, {
        withCredentials: true
    }).pipe(first(),
        map(res => {
            return plainToClass(A, res);
        })
    );
}

对于模型,例如:

// A.model.ts
import { Type } from 'class-transformer';
import { B } from './B.model';

export class A {

    // Some properties
    @Type(() => B)
    b: B[]

    // Some methods
}

和乙

// B.model.ts
import { Type } from 'class-transformer';
import { A } from './A.model';


export class B {

    // Some properties
    @Type(() => A)
    a: A[]

    // Some methods
}

但是,在编译时我得到了“循环依赖”并且确实存在循环依赖......

寻找解决方案,我知道我可以使用 Barrel ( https://github.com/typestack/class-transformer/issues/230 ) 但它不起作用。我唯一的限制是我必须保持这种关系->(或者一些非常相似的东西,因为我不能修改后端,所以我将使用 httpClient 接收数据)。

关于如何修复循环依赖的任何想法?

4

1 回答 1

0

最后,我使用了桶解决方案。似乎在我的其余代码中直接导入了 A 类,我将它们更改为使用桶并且一切正常(我仍然有警告。但它有效)

// C.model.ts

// the problem is here
import { A } from './bla/A.model';


export class C {

}
// C.model.ts

import { A } from './bla';

export class C {

}

./bla我有一个index.ts所有模型导出

于 2020-09-04T09:09:11.977 回答