cyclejs - 非初始化简器中必须有类型断言吗?
问题描述
由于减速器的类型定义为
export type Reducer<T> = (state: T | undefined) => T | undefined;
在我的不是初始减速器的减速器中,我必须声明
state = state as State
请问我遗漏了什么,或者这被认为是轻微的不便?
解决方案
可以键入非初始 reducer(在 TypeScript 中)(state: T) => T
,这些将与Reducer<T>
库中找到的类型兼容。这是我的代码库中的一个示例,第一个片段是一个初始 reducer,需要处理未定义的情况:
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$);
推荐阅读
- configuration - 如何设计一个能够以动态方式有效管理配置的系统?
- swift - 在应用关闭和重新打开时更新 UI 时节省时间的问题。迅速
- c - 使用金丝雀值的堆栈损坏检测
- k2 - 如何在 K2 Five 中使列表视图中的列可编辑?
- python - 将 numpy 数组转换为图像 RGB
- python - Kivy - 如何将 ImageButton 单击空间限制为仅在图像本身上?(而不是空白的“占用”空间)?
- autohotkey - 如何使用字符串作为参数
- haskell - 应用函子方面的一元序列
- python - 如何将多个数据框附加到带有标题的空 DataFrame
- python - Python:将参数传递给函数的两种不同方式