NestJS新建模块报错排查:确认语法无误、换TypeScript版本仍未解决
NestJS Users模块报错问题
我是NestJS新手,创建新项目后编写了Users模块,但出现报错。已确认代码语法无误,尝试更换TypeScript版本为4.9,问题仍未解决。
模块代码
users/users.module.ts
import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; @Module({ imports: [], controllers: [UsersController], providers: [UsersService], }) export class UsersModule {}
users/users.service.ts
import { Injectable } from '@nestjs/common'; @Injectable() export class UsersService{ getHello(): string { return 'Hello World!'; } }
users/users.controller.ts
import { Controller, Get } from '@nestjs/common'; import { UsersService} from './users.service'; @Controller() export class UsersController { constructor(private readonly appService: UsersService) {} @Get() getHello(): string { return this.appService.getHello(); } }
项目依赖配置
{ "name": "server_2", "version": "0.0.1", "description": "", "author": "", "private": true, "license": "UNLICENSED", "scripts": { "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1" }, "devDependencies": { "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", "@types/express": "^4.17.17", "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.5.0", "prettier": "^3.0.0", "source-map-support": "^0.5.21", "supertest": "^6.3.3", "ts-jest": "^29.1.0", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", "typescript": "^5.1.3" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" } }
报错信息
截图显示的错误包括:
- Cannot find name 'Module'.ts(2304)
- Cannot find name 'Injectable'.ts(2304)
- Cannot find name 'Controller'.ts(2304)
- Cannot find name 'Get'.ts(2304)
解决方案
1. 检查TypeScript配置
NestJS依赖装饰器特性,必须确保tsconfig.json中开启以下选项:
打开项目根目录的tsconfig.json,确认compilerOptions包含:
"experimentalDecorators": true, "emitDecoratorMetadata": true
完整的推荐配置如下:
{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "ES2021", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": false, "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false } }
修改后重启开发服务器(npm run start:dev)。
2. 重新安装依赖
如果配置没问题,尝试删除依赖文件重新安装:
rm -rf node_modules package-lock.json npm install
3. 确认模块导入到根模块
确保UsersModule已经导入到src/app.module.ts中:
import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; @Module({ imports: [UsersModule], }) export class AppModule {}
内容的提问来源于stack exchange,提问作者alambratoor
相关产品推荐
相关产品推荐

