Использование полезной нагрузки действия в подписке ActionsSubject на NGRX

У меня старая и плохая Property 'payload' does not exist on type 'Action подписка на действия:

Поскольку это действие создания, мне нужны полезные данные для проверки userId недавно созданного пользователя и перехода к /users/userId

Кстати: я следую этому действительно хорошему руководству

@Component({
  selector: 'app-sample',
  templateUrl: 'sample.html',
})
export class AppComponent {
  subs = new Subscription();

  constructor(private actionsSubject: ActionsSubject) {
    this.subs = actionsSubject.subscribe(action => {
      if (action.type === actions.CREATE_USER_SUCCESS) {
        console.log(action.payload);
      }
    });
  }
}

person Colo Ghidini    schedule 27.07.2018    source источник


Ответы (1)


Если вы посмотрите на объявление класса ActionsSubject, вы заметите, что при подписке на него вы должны получить объекты класса Action, определенные следующим образом:

export interface Action {
  type: string;
}

Как видите, payload здесь просто нет. Это означает, что вам нужно сообщить TypeScript, что внутри, если вы ожидаете, что какой-то объект набран более строго.

Я бы попробовал (при условии, что ваш класс Action называется CreateUserSuccessAction):

this.subs = actionsSubject.subscribe((action: Action) => {
  if (action.type === actions.CREATE_USER_SUCCESS) {
    let createUserAction: CreateUserSuccessAction = action as CreateUserSuccessAction;  
    console.log(action.payload);
  }
});

или лучше (при условии, что вы используете RxJS 6):

this.subs = actionsSubject.pipe(
  filter((action: Action) => action.type === actions.CREATE_USER_SUCCESS)
).subscribe((action: CreateUserSuccessAction) => {
  console.log(action.payload);
});

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

person mc.suchecki    schedule 01.08.2018