Должно ли быть утверждение типа в не начальных редукторах? - PullRequest
1 голос
/ 30 июня 2019

Поскольку тип редуктора определяется как

export type Reducer<T> = (state: T | undefined) => T | undefined;

В моих редукторах, которые не являются первоначальными, я должен объявить

state = state as State

Я что-то упустил, или это считается незначительным неудобством, пожалуйста?

1 Ответ

0 голосов
/ 01 июля 2019

Не начальные редукторы могут быть напечатаны (в TypeScript) как (state: T) => T, и они будут совместимы с типом Reducer<T>, найденным в библиотеке. Вот пример из моей кодовой базы, первый фрагмент кода является исходным редуктором, который должен обрабатывать случай для неопределенного:

const initReducer$ = xs.of(function initReducer(prev?: State): State {
  if (prev) {
    return prev;
  } else {
    return {
      selfFeedId: '',
      currentTab: 0,
    };
  }
});

Этот второй фрагмент не является начальным редуктором, и я уверен, что предыдущее состояние не является неопределенным:

const setSelfFeedId$ = ssbSource.selfFeedId$.map(
  selfFeedId =>
    function setSelfFeedId(prev: State): State {
      return {...prev, selfFeedId};
    },
);

Обратите внимание, что при объединении этих потоков результирующий тип может быть Stream<Reducer<State>> без приведения:

const reducer$: Stream<Reducer<State>> = xs.merge(initReducer$, setSelfFeedId$);
...