Почти идиоматический код для входной точки бэкэнда 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 также неверно:
Ошибка исчезла в строке 5, однако ни один из экспресс-методов не доступен:
И та же ошибка для метода 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 самостоятельно.