Expressjs и TypeScript - невозможно набрать express - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь правильно набрать nodejs приложение с использованием express и TypeScript. Рассмотрим этот код:

import express, { Router } from "express";
import { DeviceController } from "../controller/device.controller";

export class DeviceRouter {
  public router: Router;

  private deviceController: DeviceController;

  constructor() {
    this.deviceController = new DeviceController();
    this.router = express.Router();

    this.router.get("/", this.deviceController.index);
    this.router.post("/", this.deviceController.create);
    this.router.delete("/:id", this.deviceController.delete);
  }
}

Это приводит к ошибке

TSError: ⨯ Unable to compile TypeScript:
src/module/device/router/device.router.ts:13:17 - error TS2339: Property 'get' does not exist on type 'Router'.

13     this.router.get("/", this.deviceController.index);
                   ~~~
src/module/device/router/device.router.ts:14:17 - error TS2339: Property 'post' does not exist on type 'Router'.

14     this.router.post("/", this.deviceController.create);
                   ~~~~
src/module/device/router/device.router.ts:15:17 - error TS2339: Property 'delete' does not exist on type 'Router'.

15     this.router.delete("/:id", this.deviceController.delete);
               ~~~~~~

Конечно, когда маршрутизатор введен как any, все работает так, как задумано. У меня та же проблема с набором app, во-первых, пример кода, когда все работает хорошо:

import express from "express";

class App {
  public app: any;

  constructor() {
    this.app = express();
  }
}

export default new App().app;

и пример, когда ввод приводит к ошибке:

import express, { Application } from "express";

class App {
  public app: Application;

  constructor() {
    this.app = express();
  }
}

export default new App().app;

результат:

src/server.ts:5:5 - error TS2339: Property 'listen' does not exist on type 'Application'.

5 app.listen(PORT, () => console.log(`App listening on port ${PORT}!`));

Моя конфигурация:

macOS Catalina 10.15.2 node.js v10.16.0

tsconfig. json

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "noImplicitAny": true,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist",
    "baseUrl": ".",
    "paths": {
      "*": ["node_modules/*"]
    }
  },
  "include": ["src/**/*"]
}

соответствующие зависимости:

  "dependencies": {
    "express": "~4.17.1"
  },
  "devDependencies": {
    "@types/express": "~4.17.2",
    "@types/node": "~13.5.0",
    "ts-node": "~8.6.2",
    "typescript": "~3.7.5"
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...