reactjs - useState 中具有泛型类型的 Typescript 函数,允许可为 null

标签 reactjs typescript react-hooks typescript-generics react-typescript

我在 React 中有一个这样的钩子(Hook)函数:

export function useFetch<T = unknown|null>(url: string) : [T, boolean] {
  const accessToken = useAccessToken();
  const [data, setData] = useState<T>(null);  // TS ERROR
  const [isLoading, setIsLoading] = useState<boolean>(true);
  
  useEffect(() => {
    if (accessToken) {
      fetch(`/api/v1${url}`, {
        headers: {
          Authorization: `Bearer ${accessToken}`,
        },
      })
        .then((res) => res.json())
        .then(data => {
          setData(data);
          setIsLoading(false);
        });
    }
  }, [accessToken, url]);
  return [data, isLoading];
}

但我收到此错误: “null”类型的参数不可分配给“T | 类型”的参数(() => T)'.ts(2345)

如何将 T 定义为可为空?

最佳答案

T = 未知 | nulldefault for generic type parameter ,这并不意味着提供的 T 将允许 null。相反,您可以指定除 T 之外的状态还允许 null:

export function useFetch<T>(url: string): [T | null, boolean] {
    const accessToken = useAccessToken();
    const [data, setData] = useState<T | null>(null);
    const [isLoading, setIsLoading] = useState<boolean>(true);

    // ...
    return [data, isLoading];
}

Playground

关于reactjs - useState 中具有泛型类型的 Typescript 函数,允许可为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70322174/

相关文章:

reactjs - 读取react中由docker设置的环境变量

javascript - 如何添加类型 : date for react-jsonschema-form

javascript - 计算不同数组中对象之间的较大值

javascript - TypeScript:找不到变量名称(在条件语句中设置)

angular - 单击添加类和删除切换类

reactjs - React-firestore-hooks 从云 firestore 获取数据库记录

css - Material UI - 面临下拉选项低于模态窗口页脚的问题

javascript - 为什么我在输入中看到 [object Object]?

reactjs - 如何触发事件 React 测试库

reactjs - React hooks,从 prop 声明多个状态值