[英]Typescript definitions of nested function
我正在尝试为我的(nodejs)控制器 function 创建一个类型,如下所示
export const registerUser = asyncWrap(async function(req:Request, res:Response, next:NextFunction) {
res.status(200).json({ success: true});
})
上面的代码很好,但我想创建一个类型,所以我可以停止为 function 参数提供类型,这有点多余
我试过的
type NormTyped = (fn:Promise<any>) => (req: Request, res: Response, next: NextFunction) => any;
export const registerUser:NormTyped = asyncWrap(async function(req, res, next) {
res.status(200).json({ success: true});
})
但它给了我错误
Type '(...args: any) => Promise<any>' is not assignable to type 'NormTyped'.
Type 'Promise<any>' is not assignable to type '(req: Request<ParamsDictionary, any, any, ParsedQs>, res: Response<any>, next: NextFunction) => any'.
Type 'Promise<any>' provides no match for the signature '(req: Request<ParamsDictionary, any, any, ParsedQs>, res: Response<any>, next: NextFunction): any'.
这就是我的 asyncWrap 的样子(以防万一)
const asyncWrap = (fn: (...args: any) => any) =>
function asyncHandlerWrap(...args: any){
const fnReturn = fn(...args)
const next = args[args.length-1]
return Promise.resolve(fnReturn).catch(next)
}
似乎 typescript 选择显示在 function 本身中定义的类型(如果提供),所以我最终通过直接在 asyncWrap 中定义类型,如下所示
const asyncWrap = (fn: (req: Request,res: Response,next: NextFunction) => Promise<any>) =>
function asyncHandlerWrap(req: Request,res: Response,next: NextFunction){
const fnReturn = fn(req,res,next)
return Promise.resolve(fnReturn).catch(next)
}
NormTyped
应该是一个 function ,它接受一个 function 作为参数。
type NormTyped = (fn: (req: Request, res: Response, next: NextFunction) => any) => Promise<any>;
const asyncWrap = (fn: (...args: any) => any) =>
function asyncHandlerWrap(...args: any){
const fnReturn = fn(...args)
const next = args[args.length-1]
return Promise.resolve(fnReturn).catch(next)
}
export const registerUser: NormTyped = asyncWrap(async function(req, res, next) {
res.status(200).json({ success: true});
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.