簡體   English   中英

非初始化歸約器中必須有類型斷言嗎?

[英]Must there be a type assertion in non-initial reducers?

由於減速器的類型定義為

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

在不是初始減速器的減速器中,我必須聲明

state = state as State

請問我有什么遺漏嗎?還是這是個小麻煩?

可以將非初始的reducer鍵入(在TypeScript中)為(state: T) => T ,它們將與庫中的Reducer<T>類型兼容。 這是我代碼庫中的一個示例,第一個代碼片段是一個初始化約簡器,需要對未定義大小寫進行處理:

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

第二個片段是一個非初始化的reduce,我可以確定先前的狀態不是未定義的:

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$);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM