Как аннотировать сущность, которая «require express ()» возвращает в TypeScript? - PullRequest
0 голосов
/ 25 сентября 2019

Почти идиоматический код для входной точки бэкэнда Nuxt.js:

const express = require('express');
const consola = require('consola');
const { Nuxt, Builder } = require('nuxt');
const app = require('./app');

const config = require('../nuxt.config.js');
config.dev = !(process.env.NODE_ENV === 'production');

async function start() {

  const nuxt = new Nuxt(config);

  const {
    host = process.env.HOST || '127.0.0.1',
    port = process.env.PORT || 3000
  } = nuxt.options.server;

  if (config.dev) {
    const builder = new Builder(nuxt);
    await builder.build();
  }

  app.use(nuxt.render);

  app.listen(port, host, () => {
    consola.ready({
      message: `Server listening on http://${host}:${port}`,
      badge: true
    })
  })
}

start();

Мне нужно переписать его в TypeScript, при этом все типы должны быть аннотированы.Вот несколько трудностей, но в этом вопросе я собираюсь разъяснить о express.

import express from "express";

const application: BlackBox = express();

Я попытался установить неправильный тип для приложения, чтобы WebStorm исправил меня.К сожалению, предложение WebStorm также неверно:

enter image description here

Ошибка исчезла в строке 5, однако ни один из экспресс-методов не доступен:

enter image description here

И та же ошибка для метода use.Причина в том, что Express.Application относится к пустым интерфейсам:

declare global {
    namespace Express {
        // These open interfaces may be extended in an application-specific manner via declaration merging.
        // See for example method-override.d.ts (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/method-override/index.d.ts)
        interface Request { }
        interface Response { }
        interface Application { }
    }
}

Я прочитал комментарий, но не понял, зачем требовался метод express.Если мне нужно самому объявить use, listen и т. Д., Для каких типов написано express?

Я даю вам несколько ссылок, чтобы не заставлять вас искать нужный TypeScript самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...