由于减速器is defined as的类型
export type Reducer<T> = (state: T | undefined) => T | undefined;
在不是初始减速器的减速器中,我必须声明
state = state as State
请问我有什么遗漏吗?还是这是一个小麻烦?
答案 0 :(得分:0)
非初始化简可以在(state: T) => T
中键入(在TypeScript中),它们将与库中的Reducer<T>
类型兼容。这是我代码库中的一个示例,第一个代码片段是一个初始化约简器,需要对未定义的大小写进行处理:
const initReducer$ = xs.of(function initReducer(prev?: State): State {
if (prev) {
return prev;
} else {
return {
selfFeedId: '',
currentTab: 0,
};
}
});
第二个代码段是一个非初始的reducer,我可以确定先前的状态不是未定义的:
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$);