【问题标题】:Type 'Observable<unknown>' is not assignable to type 'Observable<Lesson[]>'类型 'Observable<unknown>' 不能分配给类型 'Observable<Lesson[]>'
【发布时间】:2020-01-10 10:09:54
【问题描述】:

我正在使用 Angular 8 应用程序。我正在使用 rxjs 的 Observable 模式。但是我仍然在 Observable 行上遇到错误。

当然是在谷歌上搜索错误。但没有找到正确的答案。

所以我导入了这个:

import { Subject, Observer, Observable } from 'rxjs';

我有这行:

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

但我仍然收到此错误:


Type 'Observable<unknown>' is not assignable to type 'Observable<Lesson[]>'.
  Type '{}' is missing the following properties from type 'Lesson[]': length, pop, push, concat, and 26 more.ts(2322)

错误会消失。

谢谢

ok,这是界面课程:

export interface Lesson {
    id: number;
    description: string;
    duration?: string;
    completed?: boolean;

}

这是整个文件:

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


class DataStore {

    private lessons: Lesson[] = [];

    private lessonListSubject = new Subject();

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



    initaliseLessonList(newList: Lesson[]) {
        this.lessons = _.clone(newList);
        this.broadCast();


    }
    addLesson(newLesson: Lesson) {

        this.lessons.push(newLesson);
        this.broadCast();
    }

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


    }

    toggleView(toggled: Lesson) {
        // tslint:disable-next-line: no-shadowed-variable
        const lesson = _.find(this.lessons, lesson => lesson.id === toggled.id);

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


    }

    broadCast() {
        this.lessonListSubject.next(_.cloneDeep(this.lessons));

    }
}

export const store = new DataStore();









【问题讨论】:

  • 鉴于您发布的代码,我们只能说:阅读错误消息:它告诉您 wnat 在您未发布的代码中是错误的。
  • 是的,好的,我编辑帖子
  • 我们仍然对this.lessonListSubject一无所知。错误消息告诉您问题出在:您无法将值 this.lessonListSubject.asObservable() 分配给 courseList$,因为它没有正确的类型。
  • 我发布了整个文件。

标签: angular rxjs observable


【解决方案1】:

替换

private lessonListSubject = new Subject();

private lessonListSubject = new Subject<Lesson[]>();

这样,您就有了Subject&lt;Lesson[]&gt; 而不是Subject&lt;unknown&gt;

【讨论】:

    猜你喜欢
    • 2020-07-28
    • 2021-10-28
    • 1970-01-01
    • 2020-01-10
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多