tipovi - Zašto ova omotna funkcija ne prepoznaje preopterećenja funkcija (typescript)?


Zašto dobivam ovu grešku (na posljednjoj liniji)?

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

Čini se da funkcija omotač gubi informacije o preopterećenju funkcije f0.

Znam da je ova vrsta omotavanja (bez gubitka informacija o tipu) moguća, budući da je Nodeov util.promisfy ispravno tipiziran, ali ~~ne mogu razlikovati razliku između onoga što ja radim i onoga što util.promisify radi.~~

Ažuriranje: Trik koji Node-ov util.promisify koristi je imati CustomPromisify tip parametra:

export interface CustomPromisify<TCustom extends Function> extends Function {
    __promisify__: TCustom;
}

Funkcije standardne biblioteke Node-a povezuju se s njim ovako:

export namespace readFile {
    ...
    export function __promisify__(path: PathLike | number, options?: { encoding?: null; flag?: string; } | null): Promise<Buffer>;
}

Možda ono što tražim moguće je samo ako se spojim na isti tajni sastojak koji Nodeov `util.promisify

Povezani članci