每当我尝试这样做时,我都无法让它工作,我有这个代码:
router.events.subscribe(val => {
console.log('router event:', val);
localStorage.setItem(this.anyRouteKey, val.url);
});
它给了我这个错误:
事实证明,url
属性确实存在,这只是打字中的一个错误。所以我想在短期内将val转换为Object
或any
。所以我尝试这样做,但我尝试的任何工作都没有:
将输入参数强制转换为任何?
的正确方法是什么?答案 0 :(得分:2)
这不是一个错误,val
类型为Event
,它是RouterEvent | RouteConfigLoadStart | RouteConfigLoadEnd | ChildActivationStart | ChildActivationEnd | ActivationStart | ActivationEnd
的联合类型,其中只有一些具有url
属性。联盟类型只允许访问公共属性,url
并不是所有人都可以使用;
如果您使用的是typecript 2.6,则可以使用in
类型后卫:
router.events.subscribe(val => {
if('url' in val) {
console.log(val.url);
}
});
另一种选择是使用实际具有url
属性的事件类型显式地向lambda键入参数(前提是您不使用2.6中的strictFunctionTypes
编译器标志)
router.events.subscribe((val : RouterEvent) => {
console.log(val.url);
});
或者如果你真的想要去any
路线:
router.events.subscribe((val : any) => {
console.log(val.url);
});