2017-01-28 10 views
2

は、私はこのコードをコンパイルするとき、それは誤りエラー以下

その宣言された型でもない「空」や「任意の」必須機能の下に示し、活字体で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