Estoy tratando de envolver una función sobrecargada (de un paquete que no escribí, por lo que no puedo editar las declaraciones de sobrecarga) y conservar los parámetros originales y los tipos de retorno de la función. Typescript parece solo recoger la última función de sobrecarga declarada al decidir cómo escribir el contenedor.
¿Alguien sabe de una forma de envolver genéricamente una función sobrecargada y retener los tipos de todas las sobrecargas? Sería bueno si pudiéramos tener un Partial<Tuple>
Vínculo del patio de juegos de TypeScript
function wrap<T extends (...args: any[]) => any>( fn: T, wrapper: (fn: T, ...args: Parameters<T>) => ReturnType<T> ) { return (...args: Parameters<T>) => wrapper(fn, ...args) } declare function echo(text: string): void declare function echo(text: string, options: {}): void const echoWrapped = wrap(echo, (fn, text) => { return fn(text) }) echoWrapped('hello') // error TS2554: Expected 2 arguments, but got 1.