【发布时间】:2019-06-30 10:50:08
【问题描述】:
由于reducer的类型is defined as
export type Reducer<T> = (state: T | undefined) => T | undefined;
在我的不是初始减速器的减速器中,我必须声明
state = state as State
请问是我遗漏了什么吗,或者这被认为是轻微的不便?
【问题讨论】:
标签: cyclejs
由于reducer的类型is defined as
export type Reducer<T> = (state: T | undefined) => T | undefined;
在我的不是初始减速器的减速器中,我必须声明
state = state as State
请问是我遗漏了什么吗,或者这被认为是轻微的不便?
【问题讨论】:
标签: cyclejs
非初始 reducer 可以(在 TypeScript 中)输入为 (state: T) => T,这些将与库中的 Reducer<T> 类型兼容。这是我的代码库中的一个示例,第一个 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<Reducer<State>> 而不涉及强制转换:
const reducer$: Stream<Reducer<State>> = xs.merge(initReducer$, setSelfFeedId$);
【讨论】: