reactjs - Hva man skal erklære react-router-argument som i TypeScript
Jeg prøver å sette opp react-router med Typescript på en måte som godtar en parameter.
I mitt render-element har jeg
<Route path="/show/:id" component={TestComp} />
Og jeg definerer TestComp som
const TestComp = ({ match }) => (
<div>
<h2>Showing specified ID: {match.params.id}</h2>
</div>
)
Imidlertid understreker VS Code match-parameteren (i deklarasjonen av TestComp) og forteller meg
Bindeelementet 'match' har implisitt typen 'any'.
og det feiler å kompilere.
Kan noen fortelle meg hvilken type match bør deklareres som? Jeg har prøvd RouteProps, men det fungerer heller ikke. Når jeg ser i index.d.ts, tror jeg det er definert som match<P>, men jeg er ikke sikker på hvordan man deklarerer en parameter som en generisk type.
OPPDATERING
Basert på kommentarene til @TarasPolovyi sitt svar, har jeg lagt til følgende:
Som du kan se, har dette fortsatt problemer.
Svar #1
Hvis du bruker react-router v4, importér RouteComponentProps fra react-router-dom og bruk typen RouteComponentProps<RouteInfo> - argumentnavnet må være match
Svar #2
Hvis du bruker Typescript og React Router V 4.0, er syntaksen annerledes. Du erklærer ruten din som følger:
<Route path="/home/:topic?" render={() => {
return this.renderView(<ContentHolder />);
}} />
Da blir komponenten erklært som følger:
interface RouteInfo {
topic: string;
}
interface ComponentProps extends RouteComponentProps<RouteInfo> {
}
class ContentHolder extends Component<ComponentProps> {
render() {
return (
<Content>
<h1 className="page-title">{this.props.match.params.topic}</h1>
</Content>
);
};
};
export default withRouter(ContentHolder);
Da får du full IntelliSense inne i this.props.match.params både i VS Code og IntelliJ
