我想使用这样的东西:
cats.interface.ts
export interface ICats {
meow(): void
}
cats.service.ts
@Injectable()
export class CatsService implements ICats {
constructor()
meow(): void {
return;
}
}
cats.module.ts
@Module({
providers: [CatsService]
exports: [CatsService]
})
export class CatsModule {}
animals.service.ts
@Injectable()
export class AnimalsService {
constructor(@Inject('ICats') private readonly cats: ICats)
test(): void {
return this.cats.meow();
}
}
animals.module.ts
@Module({
imports: [CatsModule],
providers: [AnimalsService],
exports: [AnimalsService]
但是收到
Nest 无法解析
最佳答案
您可以使用@Inject('ICats')
,但是您必须向 DI 容器注册该注入(inject) token 。为此,您可以使用 custom provider像这样:
@Module({
providers: [
{
provide: 'ICats',
useClass: CatsService
}
],
exports: ['ICats'],
})
export class CatsModule {}
接口(interface)本身是不够的,因为没有像类那样的关于它们的元数据。如果没有这些元数据,Nest 将不知道要注入(inject)什么,这就是为什么我们必须使用手动 @Inject()
关于typescript - 我可以使用 Nestjs 注入(inject)接口(interface)而不是类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72406470/