event instan-6ren">
gpt4 book ai didi

angular - 类型 never 上不存在属性 "url"?

转载 作者:太空狗 更新时间:2023-10-29 19:29:20 27 4
gpt4 key购买 nike

我需要订阅路由器事件:NavigationStartNavigationEnd

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 识别为 NavigationStartNavigationEnd 的类型?尽管当我在“else if”中控制“事件”时,我得到了“事件”的所有属性。

我看过this link1 (对我不起作用)和 this issue ,人们给出了关闭这个问题的各种原因,设计限制。对于我想要实现的目标,是否有解决方法,除了做:

.subscribe((event: any) => {})

EDIT : Implementation of @Saravana's solution

enter image description here

最佳答案

这是 TypeScript 编译器的一个未决问题。参见 https://github.com/Microsoft/TypeScript/issues/11664

在您的情况下,可能的解决方法是先翻转条件以检查 NavigationEnd。由于 NavigationEnd 包含 NavigationStart 的所有属性,编译器认为 NavigationEnd 的所有实例都是 NavigationStart 实例:

this._router.events
.filter(event => event instanceof NavigationStart || event instanceof NavigationEnd)
.subscribe((event: NavigationStart | NavigationEnd) => {
if (event instanceof NavigationEnd) {

}
else if (event instanceof NavigationStart) {

}
});

关于angular - 类型 never 上不存在属性 "url"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43721214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com