Tipul de returnare al funcției Typescript ca tip de returnare al funcției într-un parametru


Am o funcție care acceptă un callback ca parametru, apoi funcția va returna rezultatul callback-ului. Tipul returnat de prima funcție este tipul de returnare al funcției callback:

Iată un exemplu:

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

Problema cu care mă confrunt este că, dacă trec un tip ca prim argument de tip, tipul de returnare devine tipul implicit (necunoscut în acest caz) și nu cel al callback-ului.

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

De ce se întâmplă asta? Cum pot evita acest lucru? Mulțumesc pentru orice ajutor

Răspuns #1

Genericele din Typescript nu pot fi deduse parțial
Ori nu scrii deloc <T>, ori V în <T, V=D> va fi setat la D de parcă ai fi scris <T, D> în loc să se deducă așa cum te aștepți

Typescript: inferă tipul unui generic după primul generic opțional