Машинопись с маршрутизатором динамической карты получила ошибку типа

#reactjs #typescript #react-router #react-router-dom

Вопрос:

Используя Typescript и react-маршрутизатор-dom. Я объявляю массив для динамической генерации Route дочернего Switch элемента . Но получил ошибку типа:

 Conversion of type '{ routeMap: RouteProps<string, { [x: string]: string | undefined; }>[]; "": any; }' to type 'Switch' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
  Type '{ routeMap: RouteProps<string, { [x: string]: string | undefined; }>[]; "": any; }' is missing the following properties from type 'Switch': context, setState, forceUpdate, render, and 3 more.
 

Вот мой код:

 import { RouteProps, Switch, Redirect, Route } from 'react-router-dom'

export const routeMap: RouteProps[] = [
  {
    path: '/',
    exact: true,
    component: loadable(() => import('Views/Home')),
  },
  {
    path: `${base}`,
    exact: true,
    component: loadable(() => import('Views/Home')),
  },
  {
    path: `${base}/index`,
    component: loadable(() => import('Views/Home')),
  },
  {
    path: `${base}/404`,
    component: loadable(() => import('Views/404')),
  },
  {
    path: `${base}/floorConstruct`,
    component: loadable(() => import('Views/FloorConstruct')),
  },
  {
    path: `${base}/dataTracking`,
    component: loadable(() => import('Views/DataTracking')),
  },
  {
    path: `${base}/pageConfig`,
    component: loadable(() => import('Views/PageConfig')),
  },
]
 
 export const StaticRouters = () => (
  <Switch>
    {routeMap.map((route, index) => (
      // eslint-disable-next-line react/no-array-index-key
      <Route key={index} {...route} />
    ))}
    <Redirect to={`${base}/404`} />
  </Switch>
)
 

И я обнаружил, что StaticRouter это () => boolean так ???

тип ошибки

Я загрузил часть своего кода в codesandbox.

Комментарии:

1. Код JSX должен быть в файлах .tsx (что раздражает, если вы спросите меня, но это то, что есть)

Ответ №1:

Я перепробовал весь ваш код в своей visual studio, и у меня нет вашей ошибки.

Спасибо за ваш код и коробку.

Я попробовал какой-то код и нашел решение, которое не выдает ошибку, но я не знаю, откуда взялась ваша ошибка.

Вот мое решение.

Единственное, что отличается loadable(() => import('Views/Home')) , — это то, что может не совпадать с типом реквизита «компонента» React.ComponentType<any> | React.ComponentType<RouteComponentProps<any, StaticContext, unknown>> | undefined

Комментарии:

1. Спасибо. И я загрузил часть своего кода в поле codesandbox и обновил свой вопрос.

2. Спасибо за вашу помощь. И ваше решение заключается в том, что именно я сделал : -).

3. И причиной может быть комментарий апокрифоса. Я попытался переименовать routes/index.ts в routes/index.tsx, и это сработало.