Pesquisa de site

typescript - O módulo no índice [1] é do tipo "undefined". Verifique suas declarações de importação e o tipo do módulo


Eu tenho um problema com dependência circular no NestJs. Erro:

Scope [AppModule -> PlanModule -> TaskModule] +17ms
Error: Nest cannot create the UserModule instance.
The module at index [1] of the UserModule "imports" array is undefined.

O que eu tentei:

  • Use forwardRef no arquivo do resolver em ambos os arquivos de usuário e tarefa no construtor:
@Inject(forwardRef(() => TaskService))
private readonly tasksService: TaskService
  • Implementa a interface OnModuleInit:
onModuleInit() {
  this.userService = this.moduleRef.get(UserService);
}
  • Use importações sem o arquivo index.ts:
import { TaskModule } from '../task/task.module';

user.module

@Module({
  providers: [UserService, UserResolver],
  exports: [UserService],
  imports: [JournalModule, PlanModule, TaskModule],
})
export class UserModule {}

tarefa.módulo

@Module({
  providers: [TaskService, TaskResolver],
  exports: [TaskService],
  imports: [UserModule],
})
export class TaskModule {}

plano.módulo

@Module({
  providers: [PlanService, PlanResolver, GoalResolver],
  imports: [TaskModule, ProgramModule],
  exports: [PlanService],
})
export class PlanModule {}

Resposta #1

Seu UserModule importa o TaskModule e o TaskModule importa o UserModule, então você precisa configurar referências antecipadas para essas importações de módulo junto com as injeções de serviço. Ficaria assim:

usuário.módulo.ts

@Module({
  providers: [UserService, UserResolver],
  exports: [UserService],
  imports: [JournalModule, PlanModule, forwardref(() => TaskModule)],
})
export class UserModule {}

task.module.ts

@Module({
  providers: [TaskService, TaskResolver],
  exports: [TaskService],
  imports: [forwardRef(() => UserModule)],
})
export class TaskModule {}