NestJS应用启动失败:TypeScript编译报错(Express类型问题)
NestJS启动时TypeScript编译错误排查与解决
错误信息
return new TSError(diagnosticText, diagnosticCodes) ^ TSError: ⨯ Unable to compile TypeScript: src/server.ts(28,14): error TS2339: Property 'use' does not exist on type 'Express'. src/server.ts(29,14): error TS2339: Property 'use' does not exist on type 'Express'. src/server.ts(30,14): error TS2339: Property 'disable' does not exist on type 'Express'.
相关文件
package.json
{ "name": "tripmakery-booking-crawler", "version": "0.0.0", "description": "tripmakery Booking Crawler", "main": "index.js", "scripts": { "preinstall": "npm config set package-lock false", "start": "cross-env NODE_ENV=default node index.js", "test": "cross-env NODE_ENV=test nyc mocha -r ts-node/register src/**/*.{spec,e2e-spec}.ts" }, "engines": { "node": "9.4.0", "npm": "5.6.0" }, "nyc": { "include": [ "src/**/*.ts" ], "exclude": [ "src/**/*.{spec,e2e-spec}.ts", "typings" ], "extension": [ ".ts" ], "require": [ "ts-node/register" ], "reporter": [ "json", "html" ], "all": true }, "author": "tripbakery GmbH", "license": "ISC", "private": true, "dependencies": { "@nestjs/common": "5.0.1", "@nestjs/core": "5.0.1", "@nestjs/microservices": "5.0.1", "@nestjs/swagger": "2.0.2", "@nestjs/testing": "5.0.1", "@nestjs/websockets": "5.0.1", "@types/chai": "^4.1.3", "@types/mocha": "^5.2.0", "@types/mongoose": "5.0.15", "@types/node": "^10.1.3", "@types/node-fetch": "^1.6.9", "@types/sinon": "^5.0.0", "@types/sinon-mongoose": "^1.3.7", "axios": "^1.4.0", "chai": "^4.1.2", "chalk": "^2.4.1", "cheerio": "^1.0.0-rc.2", "cross-env": "^5.1.6", "date-holidays": "^1.2.5", "html-minifier": "^3.5.16", "htmlparser2": "^3.9.2", "mocha": "^5.2.0", "moment": "^2.22.1", "mongoose": "^5.0.14", "node-fetch": "^2.1.2", "node-uuid": "^1.4.8", "nyc": "11.8.0", "pretty-error": "^2.1.1", "reflect-metadata": "^0.1.12", "request": "^2.87.0", "rxjs": "^6.2.0", "sinon": "^5.0.10", "sinon-mongoose": "^2.1.1", "ts-node": "^6.0.5", "tslint": "^5.10.0", "typescript": "^2.8.3", "winston": "^2.4.2", "xmldom": "^0.1.27", "xpath": "0.0.27" } }
server.ts
import "reflect-metadata"; import * as express from 'express'; import {Express} from "express"; import {Server} from "http"; import {NestFactory} from '@nestjs/core'; import {INestApplication} from "@nestjs/common"; import {SwaggerModule, DocumentBuilder} from '@nestjs/swagger'; import {ApplicationModule} from './app/app.module'; import {Environment} from "./app/shared/config/config"; function swaggerSetup(app: INestApplication): void { const options = new DocumentBuilder() .setTitle('tripmakery') .setDescription('tipmakery services API structure and documentation') .setVersion('0.0') .addTag('tripmakery') .build(); const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('documentation', app, document); } async function bootstrap(): Promise<void> { const port: string = process.env.port || process.env.PORT || Environment.webserver.port; const instance: Express = express(); const server: Server = require('http').createServer(instance); instance.use(express.json({limit: '50mb'})); instance.use(express.urlencoded({limit: "50mb", extended: true, parameterLimit: 50000})); instance.disable("x-powered-by"); const app: INestApplication = await NestFactory.create(ApplicationModule, instance); app.use(express.json({limit: '50mb'})); app.use(express.urlencoded({limit: "50mb", extended: true, parameterLimit: 50000})); swaggerSetup(app); await app.init(); server.setTimeout(180000); server.listen(port, () => console.log(`Application is listening on port ${port}`)); } bootstrap();
解决方案
1. 安装Express类型定义包
错误核心是项目缺少@types/express依赖,导致TypeScript无法识别Express实例的use、disable等方法类型。执行以下命令安装:
npm install --save-dev @types/express
2. 验证TypeScript配置(可选)
如果项目根目录有tsconfig.json,确保配置包含以下内容:
types数组中添加"express"- 或
typeRoots包含"./node_modules/@types"(默认已包含,若被修改需检查)
3. 优化代码冗余(可选)
server.ts中重复添加了两次Express中间件(分别给instance和app),可删除其中一组避免冗余,比如移除instance上的中间件代码:
// 移除以下重复代码 instance.use(express.json({limit: '50mb'})); instance.use(express.urlencoded({limit: "50mb", extended: true, parameterLimit: 50000})); instance.disable("x-powered-by");
内容的提问来源于stack exchange,提问作者kaay
相关产品推荐
相关产品推荐

