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

TypeScript中回调函数参数的类型定义及语法疑问

Express中tryCatch工具函数的参数类型定义

对于你这个场景,func是一个异步的Express请求处理函数,它接收Request、Response、NextFunction三个参数,返回一个Promise。你可以通过两种方式定义它的类型:

方式一:直接在参数中定义类型

直接在func参数后写明类型,适合简单场景:

import { NextFunction, Request, Response } from 'express';

export const tryCatch = (func: (req: Request, res: Response, next: NextFunction) => Promise<any>) => {
  return async (req: Request, res: Response, next: NextFunction) => {
    try {
      await func(req, res, next);
    } catch (error) {
      next(error);
    }
  };
};

方式二:定义类型别名(推荐复用场景)

先定义一个通用的异步请求处理函数类型,后续复用更方便:

import { NextFunction, Request, Response } from 'express';

// 自定义异步请求处理函数类型
type AsyncRequestHandler = (req: Request, res: Response, next: NextFunction) => Promise<any>;

export const tryCatch = (func: AsyncRequestHandler) => {
  return async (req: Request, res: Response, next: NextFunction) => {
    try {
      await func(req, res, next);
    } catch (error) {
      next(error);
    }
  };
};

补充说明

  • 如果想让类型更严谨,可以把Promise<any>换成具体的返回值类型,比如Promise<void | Response>(Express请求处理函数通常要么无返回值,要么返回Response对象)。
  • Express内置的RequestHandler是同步处理函数的类型,不适用于异步场景,所以我们需要自定义适配异步的类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:24:58