【问题标题】:Typescript instanceof - Cannot find nameTypescript instanceof - 找不到名称
【发布时间】:2016-11-05 21:29:48
【问题描述】:

我遇到了 Typescript 编译问题。此代码返回错误:

错误 TS2304:找不到名称“NavigationEnd”。

如何让编译器知道 NavigationEnd 类型? NavigationEnd 是 angular2 路由器事件类型。

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

我正在使用 IDE PHPStorm。

【问题讨论】:

  • 你是从@angular/router导入的吗?
  • @GünterZöchbauer 谢谢。

标签: typescript angular


【解决方案1】:

您似乎缺少导入

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

【讨论】:

  • 为什么 Angular2 鼓励/强迫开发人员使用这种反模式?使用instanceof 测试事件类型有什么价值?
  • 我自己不使用 TS(只有 Dart),在 Dart 和其他语言中我知道这不是反模式。也许像stackoverflow.com/questions/33520043/… 中所示的过滤器是一种改进。
  • 在 JavaScript 中这是一个非常令人困惑的模式,因为它看起来就像在其他语言中一样,但它甚至没有相同类型的操作数。 Java : x instanceof T -> x 是一个值,T 是一个类型; JavaScript : x instanceof T -> x 是一个值,T 是一个值;它还将您与实现细节联系起来,我为什么要关心它是否具有特定的原型?
【解决方案2】:

我做了一个小测试,您似乎忘记了将“NavigationEnd”作为导入到您的项目中。 (就像 günter 在 cmets 中暗示的那样)

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

在包含这个之后,TypeScript 不再抱怨它丢失了 ;-)

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2018-08-29
    • 1970-01-01
    • 2016-01-24
    • 2017-08-14
    • 2018-12-10
    • 2016-12-04
    • 2017-09-22
    相关资源
    最近更新 更多