不能使用interface去声明新接口并继承RouteObject,会报错“接口只能扩展使用静态已知成员的对象类型或对象类型的交集。”
RouteObject是type声明的类型,无法使用extends继承,可以新建type类型,并使用“&”交叉类型实现合并交叉效果
import {
createBrowserRouter,
RouteObject,
} from "react-router-dom";
import { GoldFilled,SnippetsFilled } from '@ant-design/icons';
import App from '@/page/App'
import ErrorPage from './ErrorPage'
import {lazy, ReactNode, Suspense} from 'react'
const Page1 = lazy(()=>import('@/page/page1/Page1'))
const Page2 = lazy(()=>import('@/page/page2/Page2'))
export type RouteType = RouteObject & {
name?:string
title?:string
icon?:ReactNode
children?: RouteType[]
}
const PageLoading = function(Node:ReactNode){
return (
<Suspense fallback={<Loading></Loading>}>
{Node}
</Suspense>
)
}
const Loading = function(){
return 'Loading...'
}
const routerObj:RouteType[] = [
{
path: "/",
element: <App/>,
errorElement:<ErrorPage/>,
children:[
{
path:'/page1',
element: PageLoading(<Page1/>) ,
title:'page1',
icon:<GoldFilled />,
auth:false
},
{
path:'/page2',
element:PageLoading(<Page2/>),
title:'Page2',
icon: <SnippetsFilled />,
auth:false
},
]
},
]
export const router:any = createBrowserRouter(routerObj);