为什么这个包装器函数没有拾取函数重载(打字稿)?

时间:2019-01-13 04:19:48

标签: typescript types

为什么会出现此错误(在最后一行)?

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

相同的秘密调味料时才可能

0 个答案:

没有答案