Typescript - Ändra funktions returtyp


Jag vill skriva över en funktion och ändra dess returtyp. Jag har hittat detta tillvägagångssätt, TypeScript: Hur man wrapper en funktion och ändrar dess returtyp?. Dock skulle jag vilja ha ett mer generellt.

type Test = (
    a: string,
    b: string,
    c: number,
) => string | Promise<string>;

type Test2 = (
    a: string,
    b: string,
    c: number,
) => number | Promise<number>;

Vad jag förväntar mig är något liknande:

// CopyFunction(Function, Return)
type Test2 = CopyFunction(Test, number | Promise<number>);

Svar #1

Du kan skapa en typ som använder konditionella typer och tupler i rest-parametern för att göra vad du vill:

type CopyFunction<TFn, TR> = TFn extends (...a: infer A) => any ? (...a:A) => TR: never    
type Test22 = CopyFunction<Test, number | Promise<number>>;