экспресс-ошибка typescript выдает «любое» предупреждение

#javascript #node.js #typescript

#javascript #node.js #typescript

Вопрос:

У меня есть этот небольшой фрагмент кода

 import express from 'express';

const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('The sedulous hyena ate the antelope!');
});

app.listen(port, err => { //show error here
  if (err) {
    return console.error(err);
  }
  return console.log(`server is listening on ${port}`);
});
 

Интересно, почему появляется это сообщение

 No overload matches this call.
  The last overload gave the following error.
    Argument of type '(err: any) => void' is not assignable to parameter of type '() => void'.ts(2769)
 

Я не объявлял тип для req и res, но почему typescript показывает ошибку только для ошибки?

Комментарии:

1. Похоже listen , что в определениях типов никогда не принимается параметр ошибки github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types /…

2. Глядя на исходный код узла — похоже, что действительно обратный вызов никогда не вызывается с ошибкой, и это просто this.once('listening', cb); — так что определения типов здесь действительно правильные.

3. Ошибка будет отправлена через error событие на серверном объекте, возвращенном из app.listen() . Вы можете добавить отдельный прослушиватель для события ошибки.

Ответ №1:

Параметр ошибки отсутствует.

Удерживайте CTRL, а затем нажмите listen

Он откроется index.d.ts , и вы увидите определение

   listen(port: number, hostname: string, backlog: number, callback?: () => void): http.Server;
  listen(port: number, hostname: string, callback?: () => void): http.Server;
  listen(port: number, callback?: () => void): http.Server;
  listen(callback?: () => void): http.Server;
  listen(path: string, callback?: () => void): http.Server;
  listen(handle: any, listeningListener?: () => void): http.Server;
 

Как вы можете видеть callback , аргумент не принимается