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

如何扩展react-router-dom的Location类型解决TypeScript类型报错?

解决React Router中Location类型扩展问题

方法一:使用useLocation泛型参数(局部生效)

直接给useLocation传入自定义的State类型,快速解决单个组件的类型报错:

import { useLocation } from 'react-router-dom';

// 定义包含background的State类型
type CustomLocationState = {
  background?: Location;
};

export function App() {
  // 通过泛型指定location.state的类型
  const location = useLocation<CustomLocationState>();
  // 用可选链避免空值判断,同时安全访问background
  const background = location.state?.background;
  // ...
}

方法二:全局扩展LocationState类型(项目全局生效)

如果多个组件都需要用到这个扩展类型,在项目中创建一个类型声明文件(比如src/types/react-router.d.ts),全局修改React Router的类型:

import 'react-router-dom';

declare module 'react-router-dom' {
  // 扩展原有LocationState接口,添加background属性
  interface LocationState {
    background?: Location;
  }
}

添加该文件后,整个项目里useLocation返回的location.state都会自动包含background属性,无需在每个组件中单独指定泛型。

报错原因说明

React Router默认的LocationState类型是空对象{},TypeScript无法识别你自定义的background属性,扩展类型后就能让TypeScript识别该属性的存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:55:16