Javascript Can';t访问redux状态对象';打字脚本中的s键

Javascript Can';t访问redux状态对象';打字脚本中的s键,javascript,reactjs,typescript,ionic4,Javascript,Reactjs,Typescript,Ionic4,我在Ionic中使用了typescript和React钩子,所以我在其中添加了errorReducer,用于处理用户从服务器获取的错误,以防出现任何错误 下面是我的代码 行动 import { ERROR_OCCURED } from "./types"; export const errorActions = () => async (dispatch: any) => { console.log('err action triggere

我在Ionic中使用了typescript和React钩子,所以我在其中添加了errorReducer,用于处理用户从服务器获取的错误,以防出现任何错误

下面是我的代码

行动

  import { ERROR_OCCURED } from "./types";
    export const errorActions = () => async (dispatch: any) => {
      console.log('err action triggered')
      dispatch({
        type: ERROR_OCCURED
      });
    };
减速器

import { ERROR_OCCURED } from "../actions/types";
function fetchRedcuer(state = {}, action: any) {
  switch (action.type) {
    case ERROR_OCCURED:
      return {
        ...state,
         isauth:true
      };

    default:
      return state;
  }
}

export default fetchRedcuer;
然后在我的typescript组件中

import { useSelector, useDispatch } from "react-redux";
import React, { useState, useEffect } from "react";
import { userRegisterAction } from "../../src/redux/actions/user";
import { RootState } from "../redux/reducers";

type IUser = {
  error: { [isauth: string]: boolean };
};

const Signup: React.FC<IUser> = (props) => {
  const [state, setState] = useState<IUser>({
  error:{}
  });
  const dispatch = useDispatch();
  const error = useSelector((state: RootState) => {
    console.log(state.error);                     //here i get access to my state that is inside error reducer and also here i get error when i try to access boolean value
    return { error: state.error };   
  });
  console.log(error.error);
  return (
    <div>

    </div>
  );
};

export default Signup;
从“react-redux”导入{useSelector,useDispatch};
从“React”导入React,{useState,useffect};
从“../../src/redux/actions/user”导入{userRegisterAction};
从“./redux/reducers”导入{RootState};
类型IUser={
错误:{[isauth:string]:boolean};
};
const注册:React.FC=(道具)=>{
常量[状态,设置状态]=使用状态({
错误:{}
});
const dispatch=usedpatch();
常量错误=useSelector((状态:RootState)=>{
console.log(state.error);//在这里,我可以访问error reducer中的状态,在这里,当我尝试访问布尔值时,我也会得到错误
返回{error:state.error};
});
console.log(error.error);
返回(
);
};
导出默认注册;
诸如此类

console.log(state.error)

最初我得到
{}
,但是在状态更新之后,我得到

{isauth:true}

但如果我试图通过以下方式访问useSelector中的布尔值

console.log(state.error.isauth)

我得到了typescript错误,它表明

类型“{}”上不存在属性“isauth”


或者简单地说,我如何告诉TypeScript以某种方式首先跳过空的
对象{}
,而不检查其键值对,因为更新状态需要一点时间

我建议保持一致,而不是传递空的错误对象{}

错误传递:

{ isauth: false; }

我相信打字稿只是为了这个目的,让你们在早期阶段就知道自己的错误。因此,查看组件的每个人都会知道,您将提取(保存)的数据

因此,即使我必须在数组中获取数据,我也需要首先在我的reducer中传递空数组,如data:[]。。这就是你说的???@Ratnabhkumarrai我是专门说关于行const[state,setState]=useState({error:{});您正在传递空({})错误对象,并将此空({})对象替换为{isauth:false;}和后面的console.log(state.error)行;您将停止获取TS错误。