Typescript-funktions returtyp som returtypen av funktionen i en parameter
Jag har en funktion som accepterar en callback som parameter, sedan kommer funktionen att returnera resultatet av callbacken. Typen som returneras av den första funktionen är returtypen för callback-funktionen:
Här är ett exempel:
const useMethod = <
Data,
Error = unknown,
TReturn = unknown,
>(
fn: (options?: Options<Data, Error>) => TReturn,
options?: Options<Data, Error>,
): TReturn => {
return fn(options);
};
const callback1 = () => { return "Hello" }
const callback2 = () => { return {hello: "World"} }
const callback3 = () => { return 100; }
useMethod(callback1); // This will be string
useMethod(callback2); // This will be {hello: string}
useMethod(callback3); // This will be number
Problemet jag stöter på är att om jag anger en typ till det första typargumentet, blir returtypen standardtypen (unknown i det här fallet) och inte den som callbacken har.
useMethod<{ param: string; }>(callback1); // This should be string but getting unknown
useMethod<string>(callback2); // This should be {hello: string} but getting unknown
useMethod<boolean>(callback3); // This should be number but getting unknown
Varför händer detta? Hur kan jag undvika detta? Tack för all hjälp
Svar #1
Typescript-generics kan inte härledas delvis
Antingen skriver du inget <T> alls, eller så kommer V i <T, V=D> att sättas till D som om du skrev <T, D> istället för att härledas som du förväntar dig
Typescript: härled typen av generisk efter valfri första generisk