Javascript Redux自定义observeStore函数的类型
我正在尝试将Redux实现转换为Typescript,但是在使我们的类型安全方面遇到了困难 这是原始功能:Javascript Redux自定义observeStore函数的类型,javascript,typescript,redux,Javascript,Typescript,Redux,我正在尝试将Redux实现转换为Typescript,但是在使我们的类型安全方面遇到了困难 这是原始功能: function observeStore(store, select, onChange) { let currentState; function handleChange() { let nextState = select(store.getState()); if (nextState !== currentState) { currentS
function observeStore(store, select, onChange) {
let currentState;
function handleChange() {
let nextState = select(store.getState());
if (nextState !== currentState) {
currentState = nextState;
onChange(currentState);
}
}
let unsubscribe = store.subscribe(handleChange);
handleChange();
return unsubscribe;
}
- 如何确保
-函数实际返回状态的一部分(通常是嵌套对象或值)select
- 如何将returntype从
-参数传递到select
-参数onChange
function observeStore(store: RootState, select: (RootState) => PartOf???<RootState>, onChange: (ReturnType<typeof select>) => void): Unsubscribe
函数observeStore(存储:RootState,选择:(RootState)=>PartOf???,onChange:(ReturnType)=>void):取消订阅
类型取决于所选值的类型,因此需要使用通用函数。根据您的尝试,我假设RootState
是一个已知值,因此我们需要的唯一泛型是选择器的返回类型
是整个存储(而不是状态),因此我们使用从redux导入的store
类型,将state generic设置为store
RootState
是一个从状态中选择内容的函数,因此它接受select
并返回RootState
T
是一个函数,它接受所选值onChange
并返回T
void
是所选值currentState
,但它最初是T
未定义的
从“redux”导入{Store,Unsubscribe};
函数观测器(
店:店,,
选择:(state:RootState)=>T,
onChange:(所选:T)=>void
):退订{
让currentState:T |未定义;
函数handleChange(){
让nextState=select(store.getState());
if(nextState!==当前状态){
currentState=nextState;
onChange(当前状态);
}
}
let unsubscribe=store.subscribe(handleChange);
handleChange();
退订;
}
import {Store, Unsubscribe} from "redux";
function observeStore<T>(
store: Store<RootState>,
select: (state: RootState) => T,
onChange: (selected: T) => void
): Unsubscribe {
let currentState: T | undefined;
function handleChange() {
let nextState = select(store.getState());
if (nextState !== currentState) {
currentState = nextState;
onChange(currentState);
}
}
let unsubscribe = store.subscribe(handleChange);
handleChange();
return unsubscribe;
}