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
相关产品推荐
相关产品推荐

