Angular Router Подписаться - events.subscribe => url не является свойством? - PullRequest
0 голосов
/ 29 мая 2018
import { Component } from '@angular/core';
import {  Route, Router } from '@angular/router';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],

})

 constructor(router: Router)
 {
    router.events.subscribe(e => { 
      sessionStorage.setItem('redirectAuthPreviousRouteUrl',e.url);
    });
}

Нужна помощь по устранению ошибки компилятора, приведенной ниже, для приведенного выше кода.Это свойство существует как часть события углового маршрутизатора, и я могу манипулировать им и использовать его, но не компилировать при попытке сборки.

src/app/app.component.ts(18,105): 
error TS2339: Property 'url' does not exist on type 'Event'. 

Как правильно установить значение, на которое я подписан, когда оно считает, что свойство не существует или может не существовать в определенных случаях?

Я использую Angular6

1 Ответ

0 голосов
/ 29 мая 2018

Причина этого в том, что интерфейс Event не имеет свойства url, хотя многие реализующие классы имеют к.

Если вы знаете, какой тип Event вас интересуетв, вы можете сделать что-то вроде:

router.events.subscribe(e => { 
  if (e instanceof ResolveStart)
    sessionStorage.setItem('redirectAuthPreviousRouteUrl', e.url);
});

, что предотвратит ошибку компиляции, но также гарантирует, что событие соответствует типу, который вы ожидаете (тем самым предотвращая случайное задание redirectAuthPreviousRouteUrl неопределенным)

...