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

React Router v6+TS中Location、NavigateFunction无导出成员问题

问题原因
  • 类型导入路径错误:react-router-dom v6 的核心路由类型没有在包入口直接暴露,Location、NavigateFunction这类基础类型实际定义在其底层依赖react-router中,直接从react-router-dom导入会触发“不是导出成员”的TS报错。
  • TypeScript版本不兼容:你当前使用的TypeScript 3.0.1版本过旧,react-router-dom v6 要求最低TypeScript版本为4.1,低版本TS无法正确解析包内的类型声明文件,会加剧类型识别异常。
修复方案
  1. 先升级TypeScript到兼容版本,执行对应包管理命令即可:
# npm
npm install typescript@^4.9.5 --save-dev

# yarn
yarn add typescript@^4.9.5 -D

# pnpm
pnpm add typescript@^4.9.5 -D
  1. 修正类型导入路径,核心路由类型从react-router导入即可,该包是react-router-dom的自带依赖,无需额外手动安装。TS 4.5+ 推荐使用import type语法导入纯类型,避免无意义的运行时引入。
    修正后的完整代码如下:
import type { Location, NavigateFunction } from "react-router";
import { useLocation, useNavigate } from "react-router-dom";

const myRedirectCallback = (location: Location, navFunc: NavigateFunction) => () => {
  // 编写跳转前的自定义逻辑,比如埋点上报、权限校验、参数处理等
  if (location.pathname !== "/home") {
    navFunc("/home");
  }
};

const MyComponent = () => {
  const location = useLocation();
  const navFunc = useNavigate();
  const onClick = myRedirectCallback(location, navFunc);

  return <div onClick={onClick}>Click me!</div>;
};
可选优化写法

如果不想记忆类型的导出路径,可以直接用TypeScript内置的ReturnType工具类型推导hooks的返回值类型,完全不需要手动导入对应类型,后续就算react-router调整类型导出路径也不需要修改业务代码:

import { useLocation, useNavigate } from "react-router-dom";

const myRedirectCallback = (
  location: ReturnType<typeof useLocation>,
  navFunc: ReturnType<typeof useNavigate>
) => () => {
  // 自定义跳转逻辑
};

const MyComponent = () => {
  const location = useLocation();
  const navFunc = useNavigate();
  const onClick = myRedirectCallback(location, navFunc);

  return <div onClick={onClick}>Click me!</div>;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:27:19