refactor(router): add type definitions for guard functions (#26521)
PR Close #26521
This commit is contained in:
parent
9f4299d47b
commit
6712492dc2
|
@ -10,7 +10,7 @@ import {Observable} from 'rxjs';
|
||||||
|
|
||||||
import {Route} from './config';
|
import {Route} from './config';
|
||||||
import {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';
|
import {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';
|
||||||
import {UrlSegment} from './url_tree';
|
import {UrlSegment, UrlTree} from './url_tree';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,7 +33,7 @@ import {UrlSegment} from './url_tree';
|
||||||
* canActivate(
|
* canActivate(
|
||||||
* route: ActivatedRouteSnapshot,
|
* route: ActivatedRouteSnapshot,
|
||||||
* state: RouterStateSnapshot
|
* state: RouterStateSnapshot
|
||||||
* ): Observable<boolean>|Promise<boolean>|boolean {
|
* ): Observable<boolean>|Promise<boolean>|boolean|UrlTree {
|
||||||
* return this.permissions.canActivate(this.currentUser, route.params.id);
|
* return this.permissions.canActivate(this.currentUser, route.params.id);
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -80,9 +80,12 @@ import {UrlSegment} from './url_tree';
|
||||||
*/
|
*/
|
||||||
export interface CanActivate {
|
export interface CanActivate {
|
||||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
|
||||||
Observable<boolean>|Promise<boolean>|boolean;
|
Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) =>
|
||||||
|
Observable<boolean>| Promise<boolean>| boolean | UrlTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description
|
* @description
|
||||||
*
|
*
|
||||||
|
@ -103,7 +106,7 @@ export interface CanActivate {
|
||||||
* canActivateChild(
|
* canActivateChild(
|
||||||
* route: ActivatedRouteSnapshot,
|
* route: ActivatedRouteSnapshot,
|
||||||
* state: RouterStateSnapshot
|
* state: RouterStateSnapshot
|
||||||
* ): Observable<boolean>|Promise<boolean>|boolean {
|
* ): Observable<boolean>|Promise<boolean>|boolean|UrlTree {
|
||||||
* return this.permissions.canActivate(this.currentUser, route.params.id);
|
* return this.permissions.canActivate(this.currentUser, route.params.id);
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -160,9 +163,12 @@ export interface CanActivate {
|
||||||
*/
|
*/
|
||||||
export interface CanActivateChild {
|
export interface CanActivateChild {
|
||||||
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot):
|
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot):
|
||||||
Observable<boolean>|Promise<boolean>|boolean;
|
Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean|UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CanActivateChildFn = (childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) =>
|
||||||
|
Observable<boolean|UrlTree>| Promise<boolean|UrlTree>| boolean | UrlTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description
|
* @description
|
||||||
*
|
*
|
||||||
|
@ -185,7 +191,7 @@ export interface CanActivateChild {
|
||||||
* currentRoute: ActivatedRouteSnapshot,
|
* currentRoute: ActivatedRouteSnapshot,
|
||||||
* currentState: RouterStateSnapshot,
|
* currentState: RouterStateSnapshot,
|
||||||
* nextState: RouterStateSnapshot
|
* nextState: RouterStateSnapshot
|
||||||
* ): Observable<boolean>|Promise<boolean>|boolean {
|
* ): Observable<boolean>|Promise<boolean>|boolean|UrlTree {
|
||||||
* return this.permissions.canDeactivate(this.currentUser, route.params.id);
|
* return this.permissions.canDeactivate(this.currentUser, route.params.id);
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
|
@ -234,9 +240,14 @@ export interface CanActivateChild {
|
||||||
export interface CanDeactivate<T> {
|
export interface CanDeactivate<T> {
|
||||||
canDeactivate(
|
canDeactivate(
|
||||||
component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot,
|
component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot,
|
||||||
nextState?: RouterStateSnapshot): Observable<boolean>|Promise<boolean>|boolean;
|
nextState?: RouterStateSnapshot): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean
|
||||||
|
|UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CanDeactivateFn<T> =
|
||||||
|
(component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot,
|
||||||
|
nextState?: RouterStateSnapshot) => Observable<boolean>| Promise<boolean>| boolean | UrlTree;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description
|
* @description
|
||||||
*
|
*
|
||||||
|
@ -374,7 +385,9 @@ export interface Resolve<T> {
|
||||||
*
|
*
|
||||||
* @publicApi
|
* @publicApi
|
||||||
*/
|
*/
|
||||||
export interface CanLoad { canLoad: CanLoadFn; }
|
export interface CanLoad {
|
||||||
|
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean>|Promise<boolean>|boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export type CanLoadFn = (route: Route, segments: UrlSegment[]) =>
|
export type CanLoadFn = (route: Route, segments: UrlSegment[]) =>
|
||||||
Observable<boolean>| Promise<boolean>| boolean;
|
Observable<boolean>| Promise<boolean>| boolean;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {Type} from '@angular/core';
|
import {Type} from '@angular/core';
|
||||||
import {CanActivate, CanActivateChild, CanDeactivate} from '../interfaces';
|
import {CanActivate, CanActivateChild, CanDeactivate, CanLoad} from '../interfaces';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple function check, but generic so type inference will flow. Example:
|
* Simple function check, but generic so type inference will flow. Example:
|
||||||
|
@ -26,6 +26,10 @@ export function isFunction<T>(v: any): v is T {
|
||||||
return typeof v === 'function';
|
return typeof v === 'function';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isCanLoad(guard: any): guard is CanLoad {
|
||||||
|
return guard && isFunction<CanLoad>(guard.canLoad);
|
||||||
|
}
|
||||||
|
|
||||||
export function isCanActivate(guard: any): guard is CanActivate {
|
export function isCanActivate(guard: any): guard is CanActivate {
|
||||||
return guard && isFunction<CanActivate>(guard.canActivate);
|
return guard && isFunction<CanActivate>(guard.canActivate);
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,15 +52,15 @@ export declare class ActivationStart {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CanActivate {
|
export interface CanActivate {
|
||||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
|
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CanActivateChild {
|
export interface CanActivateChild {
|
||||||
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
|
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CanDeactivate<T> {
|
export interface CanDeactivate<T> {
|
||||||
canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean;
|
canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CanLoad {
|
export interface CanLoad {
|
||||||
|
|
Loading…
Reference in New Issue