Я новичок в 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)
throws: Объект имеет тип 'unknown'.
Вот мое создание магазина:
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)
работает и не выдает ошибку, но это не лучшее решение.