import * as React from 'react'; import { QueryString, Query, Location, LocationDescriptor, LocationState, History, Pathname, Path } from 'history'; declare const Router: Router; interface Router extends React.ComponentClass { } export default Router; // types based on https://github.com/rackt/react-router/blob/master/docs/Glossary.md declare namespace Router { type RouteConfig = React.ReactNode | PlainRoute | PlainRoute[]; type RoutePattern = string; type RouteComponents = { [key: string]: RouteComponent }; type ParseQueryString = (queryString: QueryString) => Query; type StringifyQuery = (queryObject: Query) => QueryString; type Component = React.ReactType; type RouteComponent = Component; type EnterHook = (nextState: RouterState, replace: RedirectFunction, callback?: Function) => void; type LeaveHook = () => void; type ChangeHook = (prevState: RouterState, nextState: RouterState, replace: RedirectFunction, callback: Function) => void; type RouteHook = (nextLocation?: Location) => any; type Params = { [param: string]: string }; type RouterListener = (error: Error, nextState: RouterState) => void; interface RedirectFunction { (location: LocationDescriptor): void; /** * @deprecated `replaceState(state, pathname, query) is deprecated; Use `replace(location)` with a location descriptor instead. http://tiny.cc/router-isActivedeprecated */ (state: LocationState, pathname: Pathname | Path, query?: Query): void; } interface RouterState { location: Location; routes: PlainRoute[]; params: Params; components: RouteComponent[]; } interface RouterProps extends React.Props { history?: History; routes?: RouteConfig; // alias for children createElement?: (component: RouteComponent, props: Object) => any; onError?: (error: any) => any; onUpdate?: () => any; parseQueryString?: ParseQueryString; stringifyQuery?: StringifyQuery; basename?: string; } interface PlainRoute { path?: RoutePattern; component?: RouteComponent; components?: RouteComponents; getComponent?: (location: Location, cb: (error: any, component?: RouteComponent) => void) => void; getComponents?: (location: Location, cb: (error: any, components?: RouteComponents) => void) => void; onEnter?: EnterHook; onLeave?: LeaveHook; indexRoute?: PlainRoute; getIndexRoute?: (location: Location, cb: (error: any, indexRoute: RouteConfig) => void) => void; childRoutes?: PlainRoute[]; getChildRoutes?: (location: Location, cb: (error: any, childRoutes: RouteConfig) => void) => void; } interface RouteComponentProps { history?: History; location?: Location; params?: P; route?: PlainRoute; routeParams?: R; routes?: PlainRoute[]; children?: React.ReactElement; } interface RouterOnContext extends History { setRouteLeaveHook(route: PlainRoute, hook?: RouteHook): () => void; isActive(pathOrLoc: LocationDescriptor, indexOnly?: boolean): boolean; } // Wrap a component using withRouter(Component) to provide a router object // to the Component's props, allowing the Component to programmatically call // push and other functions. // // https://github.com/reactjs/react-router/blob/v2.4.0/upgrade-guides/v2.4.0.md interface InjectedRouter { push: (pathOrLoc: History.LocationDescriptor) => void replace: (pathOrLoc: History.LocationDescriptor) => void go: (n: number) => void goBack: () => void goForward: () => void setRouteLeaveHook(route: PlainRoute, callback: RouteHook): void createPath(path: History.Path, query?: History.Query): History.Path createHref(path: History.Path, query?: History.Query): History.Href isActive: (pathOrLoc: History.LocationDescriptor, indexOnly?: boolean) => boolean } }