Невозможно скомпилировать после обновления NgRx и Angular до версии 7 - PullRequest
0 голосов
/ 23 мая 2019

Я работаю над обновлением приложения 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
);

Ошибка выглядит для меня почти так, как будто ожидается, что селекторы возвращают состояние функции вместо части состояния, которую я объявляю как тип в компоненте. Мне чего-то не хватает, что нужно сделать в процессе обновления?

1 Ответ

2 голосов
/ 23 мая 2019

private store$: Store<MyFeatureState>

Либо добавьте хранилище с глобальным состоянием (не состоянием объекта), либо просто введите Store<{}>. Селекторы уже выполняют проверку типа.

...