索引 [1] 处的模块属于“未定义”类型。检查您的导入语句和模块的类型

Tan*_*ova 2 circular-dependency typescript graphql nestjs

我在 NestJs 中遇到了循环依赖问题。错误:

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

我尝试过的:

  • 在构造函数中的用户和任务文件中的解析器文件中使用forwardRef :
@Inject(forwardRef(() => TaskService))
private readonly tasksService: TaskService
Run Code Online (Sandbox Code Playgroud)
  • 实现OnModuleInit接口:
onModuleInit() {
  this.userService = this.moduleRef.get(UserService);
}
Run Code Online (Sandbox Code Playgroud)
  • 使用不带index.ts文件的导入:
import { TaskModule } from '../task/task.module';
Run Code Online (Sandbox Code Playgroud)

用户模块

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

任务模块

@Module({
  providers: [TaskService, TaskResolver],
  exports: [TaskService],
  imports: [UserModule],
})
export class TaskModule {}
Run Code Online (Sandbox Code Playgroud)

计划模块

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

Jay*_*iel 10

UserModule导入TaskModuleTaskModule导入,因此您需要为这些模块导入以及服务注入UserModule设置前向引用。它看起来像这样:

用户模块.ts

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

任务.模块.ts

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