You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Router(v6) useNavigate遇TS2345错误:数字类型不可赋值给To类型

解决React Router useNavigate(-1)的TypeScript类型错误

你遇到的TS2345错误是因为TypeScript未识别navigate函数支持数字参数(用于历史记录前进/后退),以下是几种可行的解决办法:

  • 方法1:匹配类型定义包版本
    确保@types/react-router-dom的版本与项目中react-router-dom的版本完全一致。若使用react-router-dom@6.x,执行以下命令安装对应类型包:

    npm install @types/react-router-dom@^6 --save-dev
    # 或使用yarn
    yarn add @types/react-router-dom@^6 --dev
    

    升级后TypeScript会自动识别数字参数的合法性。

  • 方法2:添加类型断言
    若暂时无法升级依赖,可通过类型断言明确告知TypeScript参数合法:

    const navigate = useNavigate()
    
    useEffect(() => {
      setIsLoading(true);
      dispatch(fetchUser(userId!))
        .unwrap()
        .then(({ data }: { data: User }) => {
          setIsLoading(false);
          setUser(data);
        })
        .catch(() => navigate(-1 as unknown as To, { replace: true }));
    }, []);
    

    先断言为unknown再转为To类型,避免直接断言引发的类型风险。

  • 方法3:使用原生历史API
    若仅需回退一步,可直接调用浏览器原生API替代:

    .catch(() => window.history.back());
    

    这种方式无需依赖React Router的navigate函数,也不会触发类型错误。

内容的提问来源于stack exchange,提问作者YulianKh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:33:17