2016-07-04 144 views
3

我有一個Typescript編譯的問題。此代碼返回錯誤:Typescript instanceof - 找不到名字

error TS2304: Cannot find name 'NavigationEnd'.

如何讓編譯器瞭解NavigationEnd類型? NavigationEnd是angular2路由器事件類型。

this.router.events.subscribe((e) => {e instanceof NavigationEnd ? 
console.log('NavigationEnd'):console.log('Not NavigationEnd')}); 

我使用IDE PHPStorm。

+2

你是從'@ angular/router'導入它的嗎? –

+0

@GünterZöchbauer謝謝你。 – norweny

回答

14

來看,您似乎缺少進口

import { Router, NavigationEnd } from '@angular/router' 
+0

爲什麼Angular2鼓勵/強迫開發者使用這種反模式?使用'instanceof'測試Event類型有什麼價值? –

+0

我不使用TS自己(只有飛鏢)和飛鏢和其他語言我知道這不是反模式。也許像http://stackoverflow.com/questions/33520043/how-to-detect-route-change-in-angular-2/38080657#38080657中顯示的過濾器有點改進。 –

+1

在JavaScript中,它是一個非常混亂的模式,因爲它看起來像其他語言,但它甚至沒有相同類型的操作數。 Java:'x instanceof T' - >'x'是一個值,'T'是一個類型; JavaScript:'x instanceof T' - >'x'是一個值,'T'是一個值; 它也將您結合到一個實現細節,爲什麼我應該關心它具有特定的原型? –

3

我做了一個小測試,看起來您可能忘記了將「NavigationEnd」作爲導入項目添加到您的項目中。 (就像岡特在評論暗示)

import { NavigationEnd } from '@angular/router';

包括在此之後,打字稿不再抱怨它被丟失;-)