#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
, аргумент не принимается