Если вы посмотрите на возвращаемое значение useRouteMatch
hook, оно может быть любого типа
match<{}> | null
.
useRouteMatch
возвращает ноль, если путь, который у вас есть при условии не совпадает. Когда вы передаете его дочернему компоненту, вы уверены, что это правильное совпадение, но TS не уверен, так как не было проверки для проверки значений Falsey перед тем, как выполнить его поиск.
Возвращается тип match
, а не RouteComponentProps
. match
- это обобщенный c, который по умолчанию является пустым объектом, и именно здесь ожидаемые параметры будут go. Чтобы сообщить TS, вам нужно будет передать это.
Вот как Вы должны были бы напечатать это.
Parent.tsx
export interface MatchParams {
id: string;
}
const match = useRouteMatch<MatchParams>('/chat/:id');
return <Child match={match} />
Child.tsx
import { match } from 'react-router';
import { MatchParams } from './Parent';
interface ChildProps {
match: match<MatchParams> | null
}
const Child = ({ match }: ChildProps ): React.ReactElement => {
return (
<>
<div>{match}</div>
</>
);
};
export default Child ;