express typescript err throw 'any' 警告

Posted

技术标签:

【中文标题】express typescript err throw \'any\' 警告【英文标题】:express typescript err throw 'any' warningexpress typescript err throw 'any' 警告 【发布时间】:2021-03-02 15:04:37 【问题描述】:

我有一小段代码

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只为err显示错误?

【问题讨论】:

看起来类型定义中的listen 从不采用错误参数github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/… 查看节点源代码 - 看起来确实回调从未被错误调用,它只是 this.once('listening', cb); - 所以这里的类型定义实际上是正确的。 将通过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 没有参数

【讨论】:

以上是关于express typescript err throw 'any' 警告的主要内容,如果未能解决你的问题,请参考以下文章

Firebase - Node.js - Express - 错误 [ERR_HTTP_HEADERS_SENT]

Express.js 中的新 Mongoose Schema `ERR_HTTP_HEADERS_SENT` 错误

Express: [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头

express 3.5 Err: request aborted

ERR_HTTP_HEADERS_SENT - Express:标头在发送到客户端后无法设置,我该如何解决这个错误?

typescript Express Logger w / TypeScript