gpt4 book ai didi

typescript - NestJS:如何将服务从 child 传递给 parent ?

转载 作者:行者123 更新时间:2023-12-02 19:20:21 25 4
gpt4 key购买 nike

我希望通过 super() 传递注入(inject)的微服务;调用父类。

抽象顶级父类:

export abstract class Crypto {
constructor() {}
}

2 个子类:

export class BTC extends Crypto {
constructor(
@Inject('COIN_API_SERVICE')
private readonly apiService: ClientProxy, // this is an external microservice
) {
super();
}
}

export class ETH extends Crypto {
constructor(
@Inject('COIN_API_SERVICE')
private readonly apiService: ClientProxy,
) {
super();
}
}

还有一个子类的子类:

export class ERC20Token extends ETH {

constructor(
@Inject('COIN_API_SERVICE')
private readonly apiService: ClientProxy,
) {
super();
}
}

由于所有 ERC20 类的工作方式与 ETH 实例完全一样,只需进行一些调整,因此从 ETH 扩展它是有意义的。但是,尝试编译此代码会出现以下错误:

TS2415:类“ERC20Token”错误地扩展了基类“ETH”。类型具有私有(private)属性“apiService”的单独声明。

但是我需要制作 ETH 和 ERC20 token 的两个实例,因此两者都需要有一个 apiService。如何解决这个问题?

最佳答案

一个选项是使用工厂,这样工厂就会注入(inject)所有依赖项。因此,通过工厂创建的对象。

工厂的构造函数看起来有点像这样:

constructor(
@Inject('COIN_API_SERVICE')
private readonly apiService: ClientProxy,
coinType: CoinType,
) {
}

然后您可以使用注入(inject)的 API 服务和硬币类型实例化硬币。

如果你只想让子构造函数编译,你可以看看可选的装饰器:https://docs.nestjs.com/providers#optional-providers

关于typescript - NestJS:如何将服务从 child 传递给 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63140236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com