使用useCallback包裹后,参数类型就变成了any

在使用React的useCallback Hook时,如果直接包裹一个函数而没有提供类型参数,TypeScript会默认认为回调函数的参数类型为any。这是因为useCallback Hook接受两个参数,第一个是回调函数,第二个是一个依赖数组,而TypeScript在没有明确指定类型的情况下无法推断回调函数的参数类型。

要解决这个问题,你应该为回调函数指定明确的类型。例如,如果你的回调函数接收一个特定类型的参数,可以这样定义:

const handleChange: (value: string, record: RecordType) => void = useCallback(
  (value, record) => {
    // 你的处理逻辑
  },
  [dependencyList], // 依赖项数组
);

这里RecordType是你需要的具体类型,可以根据实际情况进行替换。

另外,如果你希望useCallback返回的函数保持与原始函数相同的类型签名,也可以在声明时直接指定类型:

const handleChange = useCallback<(value: string, record: RecordType) => void>(
  (value, record) => {
    // 你的处理逻辑
  },
  [dependencyList],
);

这样,即使在useCallback内部,TypeScript也能正确推断出函数参数的类型。

posted @ 2024-03-17 19:31  龙陌  阅读(89)  评论(0)    收藏  举报