2017-12-08 15 views
1

Observableタイプの問題はありますか?ラインpublic postsList$: Observable<PostModel[]> = this.postListSubject.asObservable();タイプ: 'Observable <{}>'タイプは 'Observable'タイプに割り当てられません

import { PostModel } from '../model/postModel'; 
import { Subject } from 'rxjs/Subject'; 
import { Observable } from 'rxjs/Observable'; 
import * as _ from 'lodash'; 

class DataStore { 

    private posts: PostModel[] = []; 

    private postListSubject = new Subject(); 

    public postsList$: Observable<PostModel[]> = this.postListSubject.asObservable(); 

    initializeLessonsList(newPost: PostModel[]) { 
     this.posts = _.cloneDeep(newPost); 
     this.broadcast(); 
    } 

    addLesson(newPost: PostModel) { 
     this.posts.push(_.cloneDeep(newPost)); 
     this.broadcast(); 
    } 

    broadcast() { 
     this.postListSubject.next(_.cloneDeep(this.posts)); 
    } 
} 

export const store = new DataStore(); 

私はこのエラー

を取得しています[TS]タイプ '観測< {}>' '観測' タイプに割り当てません。タイプ '{}'はタイプ 'PostModel []'に割り当てられません。 プロパティ 'includes'がタイプ '{}'にありません。

答えて

2

Subject.asObservable()によって返されるObservableの正しい型を推測するために活字体のコンパイラを許可するようにpostListSubject宣言に型情報を追加します。

private postListSubject = new Subject<PostModel[]>(); 
0

でこの

const s = new Subject(); 
const o: Observable<Model[]> = s.asObservable(); 

結果あなたが持っているエラー。

この

const s = new Subject<Model[]>(); 
const o: Observable<Model[]> = s.asObservable(); 

から

変更にそれは、すべてが素晴らしいです!

そう...あなたのコード内の

、これを変更する:あなたはタイプを提供していない場合は

private postListSubject = new Subject<PostModel[]>(); 

、タイプがデフォルトになります。これに

private postListSubject = new Subject(); 

{}!これはプロパティのないオブジェクトに似ており、実際に使用するPostModel[]タイプにマップすることはできません。

良い一日を!

関連する問題