Моя кодовая база интенсивно использует ngrx-эффекты, и мы используем ofType
, например:
@Effect()
someEffect$ = this.actions$
.ofType<LoginAction>(UserActions.LOGIN)
. . .
Я вспоминаю, что читал некоторое время назад - но не могу найти ссылку - что эффекты ngrx больше не действуют нужен как экземпляр типа generi c, так и аргумент action. Проверяя документы, я нахожу этот пример в v7 Руководстве по обновлению :
@Effect()
someEffect$ = this.actions$
.ofType(UserActions.LOGIN)
. . .
То есть используется вариант non -generi c ofType
.
Теперь на самой странице документов ofType мне кажется, что я подтверждаю, что оба они не нужны, указав:
Для обратной совместимости когда передается один аргумент типа ofType<T>('something')
, результатом является Observable<T>
. Обратите внимание, что T полностью отвергает любой возможный вывод из «чего-то». К сожалению, для неизвестных 'actions: Actions' эти типы будут производить 'Observable'. В таких случаях необходимо вручную установить тип generi c как actions.ofType ('add').
Теперь вот мой фактический код:
@Effect()
toggleTokenFailure$ = this.actions$.pipe(
ofType<ToggleTokenActiveFailure>(ApiTokenActionTypes.TOGGLE_FAILURE),
map(({ payload: { error } }) => new CreateNotification({
. . .
Если я изменю строку ofType
на эту:
ofType(ApiTokenActionTypes.TOGGLE_FAILURE),
, код все еще работает, но я теряю набор текста на payload
(становится any
). В исходной строке тип payload
был HttpErrorResponse
(потому что это тип ToggleTokenActiveFailure.payload
).
Итак, согласно документам, которые я цитировал выше, почему мое действие «неизвестно», или, более того, как мне сделать это известным?