NGRX action Typescript error TypeError: Cannot read property 'A_' of undefined at Ps.get

NGRX action Typescript error TypeError: Cannot read property 'A_' of undefined at Ps.get

所以我现在有几次遇到这个错误。当尝试将特定类型对象的数组从 ngrx 效果传递到 ngrx 存储中的操作时。就我而言,我想将 AngularFireUploadTask[] 传递给我的操作。以前我在 User Products is defined in my project 中遇到了同样的错误。我解决这个问题的方法是使用 (as User) 将对象转换为有效的产品。同样的方法在这里似乎不起作用。

请帮我理解这个问题。该错误没有提供太多信息。 这是我的行动:

 export const loadUploadSuccess = createAction(
  '[Upload/API] Load Upload Success',
  props<{ upload: AngularFireUploadTask[] }>()
);

这是效果:

init$ = createEffect(() =>
    this.actions$.pipe(
      ofType(UploadActions.init),
      fetch({
        run: (action) => {
          const uploads: AngularFireUploadTask[] = [];
          action.files.forEach((file) => {
            uploads.push(this.firebaseStorage.startUpload(file));
          });
          console.log(uploads);
          return UploadActions.loadUploadSuccess({upload: uploads});
        },
        onError: (action, error) => {
          console.error('Error', error);
          return UploadActions.loadUploadFailure({ error });
        },
      })
    )
  );

我会包括减速器以防万一。

  on(UploadActions.loadUploadSuccess, (state, { upload }) => {
    console.log('yooo', upload);
    return uploadAdapter.setAll(upload as UploadEntity[], { ...state, loaded: true });
  }),

当我将空数组传递给 UploadActions.loadUploadSuccess({upload: []}); 时,它工作得很好,但是当我添加实际对象时,我得到了错误。

据我了解,这是类型错误,所以类型有问题。我尝试在操作中使用 unknown、any、unknown[] 和 any[] 但没有任何帮助。

所以我找到了解决这个问题的方法。它不是一个完美的解决方案,但它消除了错误。

https://github.com/ngrx/platform/issues/2404

这个问题似乎是由 ngrx 中的不变性检查引起的。一旦禁用它们,错误就会消失。

StoreModule.forRoot({},{
  runtimeChecks: {
    strictStateImmutability: false,
    strictActionImmutability: false,
  },
}),