2017-01-28 23 views
2

下面是我实现的打字稿CanActivate后卫条款,当我编译的代码,它显示如下错误错误canActivate防范手段

声明类型是一个函数,既不是“无效”,也没有“任何”必须返回一个值

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):boolean { 

    this.appService.isValidUser().subscribe({ 
     next: (data) => data.authenticated, // this return true or false 
     error: (err) => false 
    }); 
} 

,这是什么错误的原因是什么?

回答

2

canActivate应返回Observable而不是Subscription。如果您拨打.subscribe(),您将获得Subscription,因此我们使用.map()

处理错误的情况下使用.catch()

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> { 

    return this.appService.isValidUser() 
    .map(data => data.authenticated) 
    .catch(_ => Observable.of([false])); 
} 

不要忘了导入所有运营商

import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/map'; 
import "rxjs/add/observable/of"; 
+1

不应返回类型应该是可观察? – Martin

+0

@Martin你的意思是'Observable .of(...)'?我不使用TS(仅在Plunker中),在那里我没有得到关于缺少泛型类型的错误。 –

+1

@GünterZöchbauer,我想他是讲述canActivate方法的返回类型 – refactor