Как объявить тип в NGRX Effect V10? Классы больше не используются, поэтому тип не выводится

#angular #ngrx #ngrx-store #ngrx-effects

#angular #ngrx #ngrx-store #ngrx-эффекты

Вопрос:

Итак, с момента обновления V10 до NGRX вы больше не можете передавать тип действия эффекту, поскольку действия теперь объявляются как функции вместо классов. Есть ли еще способ справиться с этим в V10?

 export const myAction = createAction(
    '[myAction]',
    props<{person: User}> ()
);

@Effect({ dispatch: false })
    x = this.actions$.pipe(
        ofType**<myAction>**('[myAction]'),
  

У меня нет доступа к person prop. Где до версии 10 вы это делали, потому что это был класс…

Ответ №1:

См . https://ngrx.io/guide/effects#incorporating-state

  1. Переходите myAction непосредственно к ofType
  2. Действие вводится в соответствии с его реквизитами, поэтому вы можете просто использовать action.person
 @Effect({ dispatch: false })
  x = this.actions$.pipe(
    ofType(myAction),
    map(action => of(action.person))
  );
  

Также было бы предпочтительнее использовать новый createEffect синтаксис.

Stackblitz: https://stackblitz.com/edit/so-ngrx-oftype?file=index.ts

Комментарии:

1. Спасибо, что нашли время, чтобы посмотреть на это @wlf. Проблема, похоже, все еще присутствует, хотя говорится, что «Свойство ‘person’ не существует для типа ‘never’. Есть мысли по этому поводу? Спасибо, что показали новый синтаксис, я не знал, что это изменилось :).

2. В моем stackblitz типы правильные. Вы можете проверить, наведя action курсор мыши на карту или используя intellisense, чтобы увидеть элементы. Вероятно, это зависит от того, как вы используете предыдущие операторы — сверьтесь с моим примером, и если вы не можете заставить его работать, создайте stackblitz (или форк из моего), и я посмотрю.

3. Я увидел свою ошибку, я все еще передавал строку по-старому, в отличие от передачи в action creator. Я и не подозревал, что они это изменили. Спасибо за вашу поддержку! ** если кто-то еще сталкивается с этой проблемой, передайте ActionCreator не строку, и все готово. Краткий обзор @wlf».