【问题标题】:Must there be a type assertion in non-initial reducers?非初始化简器中必须有类型断言吗?
【发布时间】:2019-06-30 10:50:08
【问题描述】:

由于reducer的类型is defined as

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

在我的不是初始减速器的减速器中,我必须声明

state = state as State

请问是我遗漏了什么吗,或者这被认为是轻微的不便?

【问题讨论】:

    标签: cyclejs


    【解决方案1】:

    非初始 reducer 可以(在 TypeScript 中)输入为 (state: T) =&gt; T,这些将与库中的 Reducer&lt;T&gt; 类型兼容。这是我的代码库中的一个示例,第一个 sn-p 是一个初始 reducer,需要处理未定义的情况:

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

    第二个 sn-p 是一个非初始 reducer,我确信之前的状态不是未定义的:

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

    请注意,当这些流合并时,生成的类型可以是 Stream&lt;Reducer&lt;State&gt;&gt; 而不涉及强制转换:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 2013-01-03
      • 2019-07-28
      • 2016-06-25
      • 1970-01-01
      相关资源
      最近更新 更多