我希望通过super()传递一个注入的微服务;调用父类。
export abstract class Crypto {
constructor() {
}
}
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'。类型具有专用属性“ apiService”的单独声明。
但是我需要同时创建ETH和ERC20令牌的实例,因此都需要具有apiService。如何解决这个问题?
一种选择是使用工厂,以便工厂注入所有依赖项。因此,将通过工厂创建对象。
工厂的构造函数如下所示:
constructor(
@Inject('COIN_API_SERVICE')
private readonly apiService: ClientProxy,
coinType: CoinType,
) {
}
然后,您可以使用注入的API服务和硬币类型实例化硬币。
如果只想编译子构造函数,则可以看一下可选的装饰器:https : //docs.nestjs.com/providers#optional-providers
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句