首页 文章

Observable不可分配

提问于
浏览
0

我将observable分配给我的列表时出现以下错误:

enter image description here

我可能会错过一个我无法弄清楚的技巧 . 如果有人可以对此有所了解,那就太棒了 . 这是我的app-data文件:

import * as _ from 'lodash';
import {Lesson} from "../shared/model/lesson";
import {Subject, Observable, Observer} from 'rxjs';


class DataStore {

    private lessons : Lesson[]  = [];

    private lessonsListSubject = new Subject();

    public lessonsList$: Observable<Lesson[]> = this.lessonsListSubject.asObservable();

    initializeLessonsList(newList: Lesson[]) {
        this.lessons = _.cloneDeep(newList);
        this.broadcast();
    }

    addLesson(newLesson: Lesson) {
        this.lessons.push(_.cloneDeep(newLesson));
        this.broadcast();
    }

    deleteLesson(deleted:Lesson) {
        _.remove(this.lessons,
            lesson => lesson.id === deleted.id );
        this.broadcast();
    }

    toggleLessonViewed(toggled:Lesson) {
        const lesson = _.find(this.lessons, lesson => lesson.id === toggled.id);

        lesson.completed = ! lesson.completed;
        this.broadcast();


    }

    broadcast() {
        this.lessonsListSubject.next(_.cloneDeep(this.lessons));
    }
}

export const store = new DataStore();

2 回答

  • 0

    你可以从 asObservable 转换返回值:

    public lessonsList$: Observable<Lesson[]> =
        this.lessonsListSubject.asObservable() as Observable<Lesson[]>;
    

    这样,typescript会将 Observable<{}> 类型转换为 Observable<Lesson[]>

  • 4

    您需要声明 lessonsListSubject 的类型,如下所示:

    private lessonsListSubject: Subject<Lesson[]> = new Subject();
    // or
    private lessonsListSubject = new Subject<Lesson[]>();
    

相关问题