比如我的场景是这样的
async function doRequest({ type }) { } function wrapper<T>(fn: (arg: T) => Promise<void>): (arg: T) => Promise<void>{ return async function(...args) { await fn.apply(null, args); }; } const myDoRequest = wrapper(doRequest); 这样写,doRequest的类型( (arg: { type: any; }) => Promise<void> )符合我的预期。
现在我想扩展一下 wrapper 到支持多个参数,但是下述两种写法都是不行的
async function doRequest({ type, }, { no }) { } function wrapper<T>(fn: (...args: T[]) => Promise<void>): (...arg: T[]) => Promise<void>{ return async function(...args) { await fn.apply(null, args); }; } const myDoRequest = wrapper(doRequest); async function doRequest({ type, }, { no }) { } function wrapper<T extends Function>(fn: T): T{ return async function(...args) { await fn.apply(null, args); }; } const myDoRequest = wrapper(doRequest); 这个 wrapper 内部会有一个微妙的报错(虽然不影响返回的类型)
问题 这种高阶函数正确的类型是什么呢?
