Nestjs与TypeOrm版本适配引发TS2305错误求助
解决NestJS + TypeORM版本调整后的TS2305导出错误
问题概述
调整NestJS和TypeORM包版本后,多数TypeScript错误已修复,但TS2305错误持续出现:模块@nestjs/typeorm未导出getRepositoryToken和TypeOrmModule成员。
报错信息
src/workout/workout.module.ts:2:10 - error TS2305: Module "@nestjs/typeorm" has no exported member 'getRepositoryToken'. 2 import { getRepositoryToken, TypeOrmModule } from '@nestjs/typeorm' ~~~~~~~~~~~~~~~~~~ src/workout/workout.module.ts:2:30 - error TS2305: Module "@nestjs/typeorm" has no exported member 'TypeOrmModule'. 2 import { getRepositoryToken, TypeOrmModule } from '@nestjs/typeorm'
相关源码
import { Module } from '@nestjs/common' import { getRepositoryToken, TypeOrmModule } from '@nestjs/typeorm' import { WorkoutResolver } from './workout.resolver' import { WorkoutService } from './workout.service' import { TypeOrmExerciseTemplateRepository } from '../exercise/repositories/type-orm-exercise-template.repository' import { TypeOrmWorkoutRepository } from './repositories/workout.typeorm.repository' import { TypeOrmExerciseRepository } from '../exercise/repositories/type-orm-exercise.repository' import { WORKOUT_REPOSITORY } from './repositories/workout.repository.interface' import { EXERCISE_TEMPLATE_REPOSITORY } from '../exercise/repositories/exercise-template-repository.interface' import { EXERCISE_REPOSITORY } from '../exercise/repositories/exercise-repository.interface' import { TypeOrmSessionRepository } from '../session/repositories/session.typeorm.repository' import { FillWorkoutWithExercisesUseCase } from './use-cases/fill-workout-with-exercises.use-case' import { PROGRAM_REPOSITORY } from '../program/repositories/program-repository.interface' import { TypeOrmProgramRepository } from '../program/repositories/type-orm-program.repository' @Module({ imports: [ TypeOrmModule.forFeature([ TypeOrmExerciseTemplateRepository, TypeOrmExerciseRepository, TypeOrmWorkoutRepository, TypeOrmSessionRepository, TypeOrmProgramRepository, ]), ], providers: [ { provide: WORKOUT_REPOSITORY, useExisting: getRepositoryToken(TypeOrmWorkoutRepository), }, { provide: EXERCISE_REPOSITORY, useExisting: getRepositoryToken(TypeOrmExerciseRepository), }, { provide: EXERCISE_TEMPLATE_REPOSITORY, useExisting: getRepositoryToken(TypeOrmExerciseTemplateRepository), }, { provide: PROGRAM_REPOSITORY, useExisting: getRepositoryToken(TypeOrmProgramRepository), }, WorkoutResolver, WorkoutService, FillWorkoutWithExercisesUseCase, ], }) export class WorkoutModule {}
依赖配置
关键依赖
"typeorm": "^0.3.12", "@nestjs/typeorm": "nestjs/typeorm",
完整依赖
"dependencies": { "@apollo/gateway": "^0.51.0", "@nestjs/apollo": "^10.0.19", "@nestjs/common": "^7.6.15", "@nestjs/config": "^2.2.0", "@nestjs/core": "^7.6.15", "@nestjs/graphql": "^10.0.21", "@nestjs/jwt": "^8.0.0", "@nestjs/passport": "^8.2.1", "@nestjs/platform-express": "^7.6.15", "@nestjs/typeorm": "nestjs/typeorm", "@types/bcrypt": "^5.0.0", "@types/passport-jwt": "^3.0.6", "apollo-server-express": "^2", "bcrypt": "^5.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.13.2", "dotenv": "^16.0.1", "env-var": "^7.3.0", "faker": "^5.5.3", "graphql": "^15.8.0", "graphql-tools": "^8.3.3", "knex": "^2.2.0", "mysql2": "^2.3.3", "passport": "^0.6.0", "passport-jwt": "^4.0.0", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", "rxjs": "^7", "ts-morph": "^15.1.0", "typeorm": "^0.3.12" },
解决方案
修正@nestjs/typeorm依赖声明
将package.json中的"@nestjs/typeorm": "nestjs/typeorm"替换为兼容当前NestJS 7.x和TypeORM 0.3.x的版本,比如:"@nestjs/typeorm": "^8.1.4"(NestJS 7.x对应@nestjs/typeorm的8.x版本,该版本已支持TypeORM 0.3.x)
清理并重新安装依赖
删除node_modules目录和package-lock.json(或yarn.lock)文件,然后执行:npm install # 或使用yarn yarn install验证导入有效性
重新编译项目,确认getRepositoryToken和TypeOrmModule的导出错误消失。
问题根源
原配置中"@nestjs/typeorm": "nestjs/typeorm"是直接拉取GitHub仓库的最新代码,而非稳定的npm包版本,导致其与当前NestJS核心版本(7.6.15)不兼容,进而缺失预期的导出成员。指定匹配的稳定版本即可解决该问题。
内容的提问来源于stack exchange,提问作者A Mehmeto
相关产品推荐
相关产品推荐

