Я работаю над обновлением приложения Angular, использующего NgRx, с версии 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
);
Ошибка выглядит для меня почти так, как будто ожидается, что селекторы возвращают состояние функции вместо части состояния, которую я объявляю как тип в компоненте. Мне чего-то не хватает, что нужно сделать в процессе обновления?