You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express TS中间件返回类型疑问:替代'any'的合适类型是什么?

问题解答

首先明确:可以把返回类型设置为void,这也是Express中间件最标准的返回类型。

为什么移除any后会报错?

你遇到的ts(2366)错误,核心原因是函数存在两种执行分支:

  • 校验失败时,你通过return res.status(400).json(...)返回了Response类型的值
  • 校验通过时,你调用next()但没有返回值,此时函数实际返回undefined

当你移除any只保留Response作为返回类型时,TypeScript会检测到函数可能返回undefined,但你的类型定义未包含该情况,因此抛出错误。

为什么void是合适的选择?

Express中间件的设计本身不强制要求返回值:

  • 你可以通过res.send()/res.json()直接返回响应(此时return的Response对象会被框架忽略)
  • 也可以调用next()让请求继续向下流转

void类型在TypeScript中表示不关心函数的返回值,无论你是return一个值还是无返回,它都能完美兼容,同时还能保留类型检查的安全性。

修改后的代码示例

直接将返回类型改为void即可解决报错:

verifyBodyFigure(
    req: Request,
    res: Response,
    next: NextFunction
  ): void {
    const { data } = req.body;

    try {
      figureBodySchema.parse(data);
    } catch (err) {
      if (err instanceof ZodError) {
        const error = new FormatError();
        return res.status(400).json(error.convertError(err));
      }
    }
    next();
  }

另外推荐一个小优化:在调用next()时加上return,避免后续代码意外执行:

// ...
    return next();
// ...

内容的提问来源于stack exchange,提问作者Daniel Roberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:10:43