将NgRx和Angular升级到版本7后无法编译

时间:2019-05-22 23:08:19

标签: angular angular-cli angular7 ngrx

我正在将使用NgRx的Angular应用程序从版本6.1.3升级到7.2.15。运行ng-update后,我的版本如下升级:

角度-6.1.3-> 7.2.15

NgRx-6.1.0-> 7.4.0

RxJS-6.2.2-> 6.5.2

rxjs-compat(第三方组件所需)-6.2.2-> 6.5.2

在升级编译失败后尝试构建或服务应用程序时,对于使用选择器的地方返回以下错误的变化:

  Types of parameters 'source$' and 'source' are incompatible.
    Type 'Observable<MyFeatureState>' is not assignable to type
src/app/my-feature/detail/detail.component.ts(84,45): error TS2345: Argument of type '(source$: Observable<State>) => Observable<DetailMetadata[]>' is not assignable to parameter of type 'OperatorFunction<MyFeatureState, DetailMetadata[]>'.

我没有使用任何非常复杂的选择器。大多数只是为了直接从功能部件商店中获得价值,并且该应用程序在升级之前就可以正常工作。作为其中一个组件的(简化)示例,错误指向:

import { MyFeatureState } from "../store/reducers";
import * as fromFeature from "../store/selectors";

@Component({
  selector: "my-detail",
  template: `
    <my-detail-list [detailMetadata]="detailMetadata$ | async"></my-detail-list>
  `
})
export class DetailComponent implements OnInit {
  detailMetadata$: Observable<DetailMetadata[]>;

  constructor(private store$: Store<MyFeatureState>) {}

  ngOnInit() {
    this.detailMetadata = this.store$.pipe(
      select(fromFeature.selectDetailMetadata)
    );
  }
}

我的选择器将在哪里

export const selectDetailMetadata = createSelector(
  getMyFeatureState,
  (state: MyFeatureState) => state.detailMetadata
);

在我看来,错误几乎像是希望选择器返回功能状态,而不是我声明为组件中类型的状态片。在升级过程中我需要做些什么吗?

1 个答案:

答案 0 :(得分:2)

  

private store$: Store<MyFeatureState>

要么以全局状态(不是要素状态)注入商店,要么仅注入Store<{}>。选择器已经进行了类型检查。