Javascript Typescript:检查特定函数是否返回值?

Javascript Typescript:检查特定函数是否返回值?,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,例如,我想告诉React的useCallback是否返回了一个值,该函数用于记忆函数。我正在使用这个黑客: type UseCallback<T extends AnyFunction> = T & { __IS_USE_CALLBACK: true }; declare function useCallback<T extends AnyFunction>( callback: T, deps: ReadonlyArray<any>, ):

例如,我想告诉React的
useCallback
是否返回了一个值,该函数用于记忆函数。我正在使用这个黑客:

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

declare function useCallback<T extends AnyFunction>(
  callback: T,
  deps: ReadonlyArray<any>,
): UseCallback<T>;
type UseCallback=T&{uuuuu是uu USE\u CALLBACK:true};
声明函数useCallback(
回叫:T,,
副总裁:ReadonlyArray,
):UseCallback;
这使我能够做到:

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

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

// Error
<Component foo={() => {}} />
函数组件({foo}:{foo:UseCallback void>}){
//嗯
{}, [])} />
//错误
{}} />

然而,使用
\u是\u使用\u回调
显然是非常有技巧的。另外,我不能对
usemo
使用相同的方法,除非它是一个对象。有没有更好的方法来判断某个值是否是由特定函数返回的?

您使用的是所谓的“品牌类型”,在TS中这是相当正常的,如果有点罕见的话。您似乎想要的更一般的东西被称为名词性类型,如中所示,只是名称不同的类型(因此
UseCallbac
T
是不同的类型,即使它们可以以相同的方式使用)。也称为不透明类型,因为它们不能相互分配。看看哪一个是我个人最喜欢的。@VLAZ所以这和我做对的事情是一样的?第二种方法使
\u是\u使用\u回调
可选的,这是我不想要的。很高兴我现在知道它叫什么了,谢谢!