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

React Router 6.14.1中TypeScript类型错误求助

解决react-router-dom 6.14.1中createBrowserRouter的TypeScript ESLint错误

问题原因

你遇到的@typescript-eslint/no-unsafe-assignment和@typescript-eslint/no-unsafe-call错误,核心原因是手动定义的MainRoutes和AuthRoutes没有明确的类型约束,TypeScript无法推断它们符合react-router要求的路由对象类型,被默认识别为any类型,触发了ESLint的安全规则。

解决方案

通过导入react-router-dom官方提供的RouteObject类型,给路由对象做显式类型标注,让TypeScript正确识别路由结构的合法性。

步骤1:导入RouteObject类型

从react-router-dom中导入官方定义的RouteObject类型,用于约束路由对象的结构:

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

步骤2:给MainRoutes添加类型标注

修改你的MainRoutes代码,为其指定RouteObject类型:

import { RouteObject } from 'react-router-dom';
import MainLayout from '../layouts/MainLayout';
import TodoListPage from '../components/pages/TodoListPage/TodoPage';
import ProtectedRoute from './ProtectedRoute';

const MainRoutes: RouteObject = {
  path: '/',
  element: <MainLayout />,
  children: [
    {
      path: '/',
      element: (
        <ProtectedRoute>
          <TodoListPage />
        </ProtectedRoute>
      ),
    }, 
  ],
};

export default MainRoutes;

步骤3:对AuthRoutes做同样处理

将AuthRoutes也用RouteObject类型标注,确保传入createBrowserRouter的所有路由对象都有明确的类型:

import { RouteObject } from 'react-router-dom';
// 导入你的Auth相关组件和布局

const AuthRoutes: RouteObject = {
  // 你的Auth路由结构定义
};

export default AuthRoutes;

额外增强(可选)

如果路由的children结构复杂,可显式指定children的类型为RouteObject[],进一步提升类型安全性:

const MainRoutes: RouteObject = {
  path: '/',
  element: <MainLayout />,
  children: [
    {
      path: '/',
      element: (
        <ProtectedRoute>
          <TodoListPage />
        </ProtectedRoute>
      ),
    }, 
  ] as RouteObject[],
};

同时确保ProtectedRoute组件类型正确,需接收children属性并返回合法React元素:

import { ReactNode } from 'react';
import { Navigate } from 'react-router-dom';

interface ProtectedRouteProps {
  children: ReactNode;
}

const ProtectedRoute = ({ children }: ProtectedRouteProps) => {
  const isAuthenticated = /* 你的鉴权逻辑 */;
  return isAuthenticated ? <>{children}</> : <Navigate to="/login" />;
};

export default ProtectedRoute;

完成以上修改后,TypeScript就能正确推断路由对象的类型,ESLint的unsafe相关错误会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:17:21