type Component = any type Dictionary = { [key: string]: T } type ErrorHandler = (err: Error) => void export type RouterMode = "hash" | "history" | "abstract" export type RawLocation = string | Location export type RedirectOption = RawLocation | ((to: Route) => RawLocation) export type NavigationGuardNext = ( to?: RawLocation | false | void, ) => void export type NavigationGuard = ( to: Route, from: Route, next: NavigationGuardNext, ) => any interface _History { current: Route; } export declare class VueRouter { constructor(options?: Obj) mode: RouterMode; currentRoute: Route; history: _History; beforeEach(guard: NavigationGuard): Function beforeResolve(guard: NavigationGuard): Function afterEach(hook: (to: Route, from: Route) => any): Function push(location: RawLocation): Promise replace(location: RawLocation): Promise push( location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler, ): void replace( location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler, ): void go(n: number): void back(): void forward(): void match(raw: RawLocation, current?: Route, redirectedFrom?: Location): Route getMatchedComponents(to?: RawLocation | Route): Component[] onReady(cb: Function, errorCb?: ErrorHandler): void onError(cb: ErrorHandler): void addRoutes(routes: RouteConfig[]): void addRoute(parent: string, route: RouteConfig): void addRoute(route: RouteConfig): void getRoutes(): RouteRecordPublic[] resolve( to: RawLocation, current?: Route, append?: boolean, ): { location: Location route: Route href: string // backwards compat normalizedTo: Location resolved: Route } } type RoutePropsFunction = (route: Route) => Object interface _RouteConfigBase { path: string; name?: string; children?: RouteConfig[]; redirect?: RedirectOption; alias?: string | string[]; meta?: RouteMeta; beforeEnter?: NavigationGuard; caseSensitive?: boolean; pathToRegexpOptions?: PathToRegexpOptions; } interface RouteConfigSingleView extends _RouteConfigBase { component?: Component; props?: boolean | Object | RoutePropsFunction; } interface RouteConfigMultipleViews extends _RouteConfigBase { components?: Dictionary; props?: Dictionary; } type RouteConfig = RouteConfigSingleView | RouteConfigMultipleViews interface PathToRegexpOptions { sensitive?: boolean; strict?: boolean; end?: boolean; } interface _RouteConfigBase { path: string; name?: string; children?: RouteConfig[]; redirect?: RedirectOption; alias?: string | string[]; meta?: RouteMeta; beforeEnter?: NavigationGuard; caseSensitive?: boolean; pathToRegexpOptions?: PathToRegexpOptions; } interface RouteRecord { path: string; regex: RegExp; components: Dictionary; name?: string; parent?: RouteRecord; redirect?: RedirectOption; matchAs?: string; meta: RouteMeta; beforeEnter?: ( route: Route, redirect: (location: RawLocation) => void, next: () => void, ) => any; props: | boolean | Object | RoutePropsFunction | Dictionary; } interface RouteRecordPublic { path: string; components: Dictionary; name?: string; redirect?: RedirectOption; meta: any; beforeEnter?: ( route: Route, redirect: (location: RawLocation) => void, next: () => void, ) => any; props: | boolean | Object | RoutePropsFunction | Dictionary; } interface Location { name?: string; path?: string; hash?: string; query?: Dictionary; params?: Dictionary; append?: boolean; replace?: boolean; } interface Route { path: string; name?: string | null; hash: string; query: Dictionary; params: Dictionary; fullPath: string; matched: RouteRecord[]; redirectedFrom?: string; meta?: RouteMeta; } interface RouteMeta extends Record { } export declare class Router { constructor(op: { [key: string]: any }); static $router: VueRouter; route(route: string, callback: Function): this; route(route: string, name: string, callback?: Function): this; execute(callback?: Function, args?: any[]): void; navigate(fragment: string, options?: { [key: string]: any } | boolean): this; } export declare class History { atRoot(): boolean; getSearch(): string; getHash(window?: Window): string; getPath(): string; getFragment(fragment?: string): string; start(op?: { [key: string]: any }): void; stop(): void; route(route: string, callback: Function): void; checkRoute(route: string): { route: string, callback: Function }; unRoute(route: string): void; checkUrl(e?: Event): void; loadUrl(fragment: string): boolean; navigate(fragment: string, options?: { [key: string]: any } | boolean): void; }