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' 仅指一种类型,但在这里被用作值。”?

为自定义打字稿错误实例实施 instanceof 检查?

TypeScript系列教程08运算符

LayaBox---TypeScript---高级类型

TypeScript 学习笔记 — 类型推断和类型保护

TypeScript 错误 2304:找不到名称 'div' - CRA TypeScript 模板