TypeScript编译报错No overload matches this call,express.listen调用异常
问题根源
express.Application.listen() 方法的回调函数按照类型定义不接收任何参数,这是触发类型报错的核心原因。
你传入的回调声明了err参数,和@types/express给出的listen重载签名不匹配,因此抛出ts(2769)错误。你后续新增req、res参数的修改也不符合类型定义:listen是服务启动方法,回调不会传入请求、响应对象,这两个参数仅属于路由处理函数的入参。express的listen本质是对Node.js原生http.createServer().listen()的封装,原生listen的回调仅会在服务启动成功后触发,启动错误不会传入该回调,而是通过error事件抛出,所以类型定义才是() => void。
解决方式
方案1:保留错误处理逻辑
删除回调的err参数,单独监听error事件处理启动错误:
this.app.listen(port, () => { // 仅服务启动成功后执行 console.log(`Server is listening on port ${port}`); }).on('error', (err: Error) => { // 服务启动异常在这里处理 console.log("err", err) });
方案2:不需要处理启动错误的极简写法
this.app.listen(port, () => { console.log(`Server is listening on port ${port}`); });
内容的提问来源于stack exchange,提问作者JustAG33K
相关产品推荐
相关产品推荐

