为什么会出现此错误(在最后一行)?
declare function f0<A, B>(a: A, b: B): string
declare function f0<A>(a: A): boolean;
declare function wrap
<Ret, A>(f: (a: A) => Ret): (a: A) => Ret[]
declare function wrap
<Ret, A, B>(f: (a: A, b: B) => Ret): (a: A, b: B) => Ret[]
const f1 = wrap(f0)
const b1: boolean[] = f1(1)
const s1: string[] = f1(1, 2) // Error: expected 1 arguments but got 2
包装函数似乎丢失了有关f0
函数重载的信息。
我知道可以进行这种包装(不丢失类型信息),因为Node的util.promisfy
的键入正确,但是~~我无法分辨我在做什么和{{1 }}可以。~~
更新:节点util.promisify
使用的技巧是拥有一个util.promisify
类型的参数:
CustomPromisify
Node标准库函数像这样钩入它:
export interface CustomPromisify<TCustom extends Function> extends Function {
__promisify__: TCustom;
}
也许我要寻找的东西只有在插入与Node的`util.promisfiy
相同的秘密调味料时才可能