【发布时间】:2017-05-01 14:58:55
【问题描述】:
我需要订阅路由器事件:NavigationStart 和 NavigationEnd
this._router.events
.filter(event => event instanceof NavigationStart || event instanceof NavigationEnd)
.subscribe((event: NavigationStart | NavigationEnd) => {
if (event instanceof NavigationStart) {
// event.url, typescript does not flag any error
}
else if (event instanceof NavigationEnd) {
// typescript flags, that property "url" does not exist on type "never".
// if I make this block as the only block,
// i.e. remove the previous "if" block and put this under "if"
// then it works fine
}
// event.url, works fine, even here
});
为什么 typescript 不能将 event 识别为 NavigationStart 或 NavigationEnd 的类型?虽然当我在“else if”中控制台“事件”时,我得到了“事件”的所有属性。
我见过this link1(对我不起作用)和this issue,人们给出了关闭这个问题的各种理由,design limitations。有没有我想要实现的解决方法,other than doing:
.subscribe((event: any) => {})
编辑:@Saravana 解决方案的实施
【问题讨论】:
-
您尝试过将事件重命名为其他名称吗?
-
是的,试过了!在
subscribe中取一个与我在filter中使用的名称不同的名称。那是行不通的。有效的是,我在if block之前创建了event的别名,例如:let alias = event。在if condition中使用event,在else if condition中使用alias。
标签: angular typescript