键入自定义减速器后,Firebase减速器会丢失类型

时间:2020-05-03 16:30:10

标签: reactjs typescript firebase redux

我是Typescript和Redux的新手,所以请多多包涵。 能够使用

useSelector((state: RootState) => state.auth.authError);

我必须输入我的减速器,就像这样:

let authReducer: (state: any, action: any) => AuthState

其中AuthState为:

interface AuthState {
    authError: string;
    isLoading: boolean;
}

现在我可以成功使用useSelector,但是在创建rootReducer

const rootReducer = combineReducers({
    auth: authReducer,
    firebase: firebaseReducer,
});

我的firebaseReducer丢失了其原始类型,现在的类型为firebase: Reducer<unknown, any>。因此,我无法从状态访问Firebase来检查Firebase是否已加载,以防止未经授权访问需要登录的页面。基本上:

useSelector((state: RootState) => state.firebase.auth)

抛出:对象的类型为“未知”。

这是我的商店创建:

const store = createStore(
    rootReducer,
    applyMiddleware(thunk.withExtraArgument({ getFirebase }))
);

和我的RootState:

export type RootState = ReturnType<typeof rootReducer>;

我也尝试过export type RootState = ReturnType<typeof store.getState>;

编辑: 我找到了一个临时解决方案。 用useSelector((state: RootState) => state.firebase.auth)替换useSelector((state: any) => state.firebase.auth)可以并且不会引发错误,但这不是最佳解决方案。

0 个答案:

没有答案