Typescript instanceof - 找不到名称
Posted
技术标签:
【中文标题】Typescript instanceof - 找不到名称【英文标题】:Typescript instanceof - Cannot find name 【发布时间】: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 谢谢。
【参考方案1】:
您似乎缺少导入
import Router, NavigationEnd from '@angular/router'
【讨论】:
为什么 Angular2 鼓励/强迫开发人员使用这种反模式?使用instanceof
测试事件类型有什么价值?
我自己不使用 TS(只有 Dart),在 Dart 和其他语言中我知道这不是反模式。也许像***.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 不再抱怨它丢失了 ;-)
【讨论】:
以上是关于Typescript instanceof - 找不到名称的主要内容,如果未能解决你的问题,请参考以下文章
为啥 TypeScript 中的 'instanceof' 会给我错误“'Foo' 仅指一种类型,但在这里被用作值。”?