Angular5 може да активира защита: Типовете свойства „canActivate“ са несъвместими

Опитвам се да внедря прост canActivate в моята Auth услуга

import {CanActivate,ActivatedRouteSnapshot} from '@angular/router';
export class Auth implements CanActivate{
    canActivate(
        next: ActivatedRouteSnapshot,
        state: ActivatedRouteSnapshot
      ): Observable<boolean> {

            return Observable.of(true);
      }
}

получи тази грешка

ГРЕШКА в src/app/modules/user/auth.ts(13,14): грешка TS2420: Клас „Auth“ неправилно имплементира интерфейс „CanActivate“. Типовете свойства „canActivate“ са несъвместими. Тип „(следващ: ActivatedRouteSnapshot, състояние: ActivatedRouteSnapshot) => Наблюдаем“ не може да се присвои на тип „(маршрут: ActivatedRouteSnapshot, състояние: RouterStateSnapshot) => булево | Обещание | Наблюдавайте...“. Типовете параметри „състояние“ и „състояние“ са несъвместими. Типът „RouterStateSnapshot“ не може да се присвои на тип „ActivatedRouteSnapshot“. Типовете 'url' на собствеността са несъвместими. Типът „низ“ не може да бъде присвоен на тип „UrlSegment[]“.


person iam batman    schedule 01.03.2018    source източник


Отговори (2)


Мисля, че проблемът е декларацията за състояние: трябва да бъде RouterStateSnapshot

interface CanActivate { 
   canActivate(route: ActivatedRouteSnapshot, 
               state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
}
person aspnet82    schedule 01.03.2018

Променете типа на state на RouterStateSnapshot. Това е единственото нещо, от което компилаторът се оплаква.

person smnbbrv    schedule 01.03.2018