2016-10-26 26 views
2

はじめに:私はこの全く同じエラーで他にもたくさんの質問があることを知っていますが、私はまだ自分自身を理解できないようです。タイプ 'Observable <{}>はタイプ' Observable 'に割り当てられません

私は単純なサービスと、もう1つのシンプルなコンポーネントを持っています。私は非常に密接にangular2ヒーローのチュートリアルに従うことをしようとしている、ここに私のコードです:

location.ts


export class Location { 
    name: string; 
    type: string; 
    c: string; 
    zmw: string; 
    tz: string; 
    tzs: string; 
    l: string; 
    ll: string; 
    lat: string; 
    lon: string; 
} 

場所-search.service.ts


import { Injectable }  from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable }  from 'rxjs'; 

import { Location }   from './location'; 

@Injectable() 
export class LocationSearchService { 
    constructor(private http: Http) {} 

    search(term: string): Observable<Location[]> { 
     return this.http 
      .get(`api_url_i've_removed`) 
      .map((r: Response) => r.json().data as Location[]); 
    } 
} 

場所-search.component.ts


import { Component, OnInit } from '@angular/core'; 
import { Router }    from '@angular/router'; 
import { Observable }   from 'rxjs/Observable'; 
import { Subject }    from 'rxjs/Subject'; 

import { LocationSearchService } from './location-search.service'; 
import { Location }     from './location'; 

@Component({ 
    selector: 'location-search', 
    templateUrl: 'location-search.component.html', 
    styleUrls: ['assets/styles.css'], 
    providers: [ LocationSearchService ] 
}) 

export class LocationSearchComponent implements OnInit { 
    locations: Observable<Location[]>; 
    private searchTerms = new Subject<string>(); 

    constructor(
     private locationSearchService: LocationSearchService, 
     private router: Router) {} 

    search(term: string): void { 
     this.searchTerms.next(term); 
    } 

    ngOnInit(): void { 
     this.locations = this.searchTerms // <- ERROR HERE 
      .debounceTime(300) 
      .distinctUntilChanged() 
      .switchMap(term => term 
       ? this.locationSearchService.search(term) 
       : Observable.of<Location[]>([])) 
      .catch(error => { 
       console.log(error); 
       return Observable.of<Location[]>([]); 
      }) 
    } 
} 

私はエラーを取得しておいてください。 Type 'Observable<{}>' is not assignable to type 'Observable<Location[]>'.at line 29 col 9

私は明らかに間違って何かをやっていますか?助けてくれてありがとう

答えて

1

私はあなたに正確な問題を伝えることはできませんが、私はこの数回にわたって苦労しました!

.switchMap()の問題です。 IDKそれはtypescriptですが問題だか何.. 多分ちょうどタイピングファイルが悪い..です

場合は、それをキャストする必要があります(あなたが述べたように)

ngOnInit(): void { 
    this.locations = <Observable<Location[]>>this.searchTerms // <- ERROR HERE 
     .debounceTime(300) 
     .distinctUntilChanged() 
     .switchMap(term => term 
      ? this.locationSearchService.search(term) 
      : Observable.of<Location[]>([])) 
     .catch(error => { 
      console.log(error); 
      return Observable.of<Location[]>([]); 
     }) 
} 

またはを使用して機能switchMap()catch()を使用次のような型宣言です。

ngOnInit(): void { 
    this.locations = this.searchTerms // <- ERROR HERE 
     .debounceTime(300) 
     .distinctUntilChanged() 
     .switchMap<Observable<Location[]>>(term => term 
      ? this.locationSearchService.search(term) 
      : Observable.of<Location[]>([])) 
     .catch<Observable<Location[]>>(error => { 
      console.log(error); 
      return Observable.of<Location[]>([]); 
     }) 
} 
+0

ありがとう!私は '.switchmap > .'と' .catch > ' –

+0

を実行することでこの問題を解決しました。それを知らなかった - ありがとう!私の答えも更新されます。 – mxii

+0

Thx、あなたの最初の解決策は私のためにそれをしました。 – SoS

関連する問題