【发布时间】:2019-01-17 14:04:41
【问题描述】:
我正在尝试将 angularfire2 的承诺映射到类型化的 observables。这是我的课:
export class RestService<T extends Entity> {
constructor(
protected afAuth: AngularFireAuth,
protected store: AngularFirestore,
protected readonly collectionName: string) {
this.collection = store.collection<T>(collectionName);
}
protected collection: AngularFirestoreCollection<any>;
all(): Observable<Array<T>> {
return from(this.collection
.snapshotChanges()
.pipe(
map(action => mapActionArray(action)),
catchError((error: any) => {
throw new ApiError(error);
})
)
);
}
}
/**
* Override Firestore errors with common app errors.
* @param error - Firestore error
*/
function mapError(error: any): Observable<ApiError> {
return throwError(new ApiError(error));
}
function mapDocument<T extends Entity>(doc: DocumentSnapshot<any>): T {
return {
id: doc.id,
...doc.data()
};
}
注意 all() 方法,我想在 catchError 中映射任何错误,但问题是我得到了这种类型的错误:
TS2322:类型“Observable”不可分配给类型“Observable”。类型“{}[]”不可分配给类型“T[]”。类型“{}”不可分配给类型“T”。
我通过将返回类型更改为 Observable 来修复它,但是每当我使用此服务时都需要使用相同的类型,我觉得它不好。 我该如何解决这个问题?我希望能够键入我的服务并事先将错误映射到适当的 CustomError 对象(这包括将代码映射到消息)。
顺便说一句,我也尝试使用 RXJS 的 throwError。
提前致谢。
【问题讨论】:
标签: rxjs angularfire2 rxjs6