首页 > 解决方案 > 打字稿错误,我无法将函数分配给 RefObject.current 并且它说它不可调用

问题描述

任何人都知道为什么我不能将函数类型分配给 ref.current 类型?

  useEffect(() => {
    savedHandler.current = handler; // ERROR HERE:
  }, [handler]);

TS2741:“(e:ChangeEvent)=> any”类型中缺少属性“current”,但在“RefObject”类型中是必需的。

稍后我尝试调用该函数并得到一个错误:

   const eventListener = (event: Event) => savedHandler?.current?.(event);

这给了我错误:

TS2349:此表达式不可调用。类型“RefObject”没有调用签名。

如果我可以为 current 分配一个函数,那么我应该可以调用它,不是吗?但是,为什么抱怨我无法为“当前”分配功能。代码运行良好,只是那些 TS 错误让我发疯。

标签: reactjstypescript

解决方案


估计是savedHandler类型的问题。这对我有用:

function useInterval(callback: () => void) {
  const savedCallback = useRef<typeof callback>();

  useEffect(() => {
    savedCallback.current = callback;
  }, [callback]);
}

推荐阅读