我正在将使用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
);
在我看来,错误几乎像是希望选择器返回功能状态,而不是我声明为组件中类型的状态片。在升级过程中我需要做些什么吗?
答案 0 :(得分:2)
private store$: Store<MyFeatureState>
要么以全局状态(不是要素状态)注入商店,要么仅注入Store<{}>
。选择器已经进行了类型检查。