javascript - Typescript: kontrollera om ett värde returnerades av en specifik funktion?


Till exempel vill jag avgöra om ett värde returnerades av Reacts useCallback, som memoiserar funktioner. Jag använder detta trick:

type UseCallback<T extends AnyFunction> = T & { __IS_USE_CALLBACK: true };

declare function useCallback<T extends AnyFunction>(
  callback: T,
  deps: ReadonlyArray<any>,
): UseCallback<T>;

Detta låter mig göra:

function Component({ foo }: { foo: UseCallback<() => void> }) {}

// Ok
<Component foo={useCallback(() => {}, [])} />

// Error
<Component foo={() => {}} />

Men att använda __IS_USE_CALLBACK är uppenbarligen väldigt hackigt. Dessutom kan jag inte använda samma tillvägagångssätt för useMemo om det inte är ett objekt. Finns det ett bättre sätt att veta om ett värde returnerades av en specifik funktion?