AngularFire2 обещает проблемы с наблюдаемым типом

Я пытаюсь сопоставить обещания angularfire2 с типизированными наблюдаемыми. Это мой класс:

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: Type 'Observable<{}[]>' is not assignable to type 'Observable'.   Type '{}[]' is not assignable to type 'T[]'.     Type '{}' is not assignable to type 'T'.

Я исправил это, изменив тип возвращаемого значения на Observable <{} | Array>, но для этого потребовалось бы использовать одни и те же типы всякий раз, когда я использую эту службу, мне это не подходит. Как мне обойти это? Я хочу иметь возможность вводить свои службы и заранее отображать ошибки в соответствующий объект CustomError (включая отображение кодов в сообщениях).

Кстати, я также пробовал использовать throwError из RXJS.

Заранее спасибо.

Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
Promise v/s Observable в Angular
Promise v/s Observable в Angular
В системах Push производитель определяет, когда отправить данные потребителю. Потребитель не знает, когда он получит эти данные.
Подсказка RxJS [filter, skipWhile]
Подсказка RxJS [filter, skipWhile]
Эта подсказка описывает разницу между операторами filter и skipWhile из библиотеки RxJS .
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отвечая на свой вопрос, мне пришлось использовать catchError перед оператором карты. Так:

  all(): Observable<Array<T>> {
    return from(this.collection
        .snapshotChanges()
        .pipe(
            map(action => mapActionArray(action)),
            catchError((error: any) => {
                throw new ApiError(error);
            })
        )
    );
}

Станет

  all(): Observable<Array<T>> {
    return from(this.collection
        .snapshotChanges()             
        .pipe(
            catchError((error: any) => {
                throw new ApiError(error);
            }),
            map(action => mapActionArray(action))                
        )
    );
}

Надеюсь, поможет

Другие вопросы по теме