我有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();
在public postsList$: Observable<PostModel[]> = this.postListSubject.asObservable();
行上我收到此错误
[ts]输入'Observable&lt; {}&gt;'不能分配给类型 “可观测”。类型“{}”不能分配给类型 'PostModel []'。 “{}”类型中缺少属性“包含”。
答案 0 :(得分:3)
向postListSubject
声明添加类型信息,以允许TypeScript编译器推断Observable
返回的Subject.asObservable()
的正确类型:
private postListSubject = new Subject<PostModel[]>();
答案 1 :(得分: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();
到此:
private postListSubject = new Subject<PostModel[]>();
如果您未提供类型,则类型将默认为{}
!这就像没有属性的对象,实际上无法映射到您使用的PostModel[]
类型。
度过愉快的一天!