Ваш CanDeactivate
импорт неправильный.Вы должны импортировать его из @angular/router
следующим образом:
import { CanDeactivate } from '@angular/router';
Это позволит экспортировать правильный интерфейс для использования в вашем проекте.Это общий интерфейс с параметром типа для типа вашего компонента:
export interface CanDeactivate<T> {
canDeactivate(
component: T, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean|UrlTree>|Promise<boolean|UrlTree>|boolean
|UrlTree;
}
В соответствии с вашим импортом файл preactivation.ts в репозитории Angular экспортирует интерфейс с тем же именемно использование которого, по-видимому, является внутренним для угловой библиотеки и не предназначено для использования вне ее:
export class CanDeactivate {
constructor(public component: Object|null, public route: ActivatedRouteSnapshot) {}
}
Этот интерфейс не является универсальным и не имеет параметра типа, поэтому при использовании вы получаете ошибкуэто так:
CanDeactivate<CanDeactivateComponent>