You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:35:01