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