Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 类型脚本错误类型';{}';类型中缺少以下属性_Reactjs_Typescript_Redux_Types - Fatal编程技术网

Reactjs 类型脚本错误类型';{}';类型中缺少以下属性

Reactjs 类型脚本错误类型';{}';类型中缺少以下属性,reactjs,typescript,redux,types,Reactjs,Typescript,Redux,Types,我通常不熟悉TypeScript,我收到了这个错误 类型“{}”缺少类型“Pick”中的以下属性:loadUser,user 上面的错误出现在App.text中,指向 我很困惑为什么我会得到这个,可能的解决办法是什么?我假设我没有在应用程序路由器中正确地声明某些内容,但我似乎无法找出什么是错误的或我收到的错误 App.tsx 从“./router/AppRouter”导入AppRouter 常量应用程序:React.FC=()=>{ 返回( ) } 导出默认应用程序 应用路由器 从“Reac

我通常不熟悉TypeScript,我收到了这个错误

类型“{}”缺少类型“Pick”中的以下属性:loadUser,user

上面的错误出现在App.text中,指向

我很困惑为什么我会得到这个,可能的解决办法是什么?我假设我没有在应用程序路由器中正确地声明某些内容,但我似乎无法找出什么是错误的或我收到的错误

App.tsx
从“./router/AppRouter”导入AppRouter
常量应用程序:React.FC=()=>{
返回(
)
}
导出默认应用程序
应用路由器

从“React”导入React,{ExoticComponent,Fragment,useEffect}
从“react Router dom”导入{BrowserRouter as Router,Switch,Route}
从“../components/analytics/dashboard/FreeTextView/FreeTextView”导入FreeTextView
从'react redux'导入{connect,useDispatch,useSelector}
从“@pxhub/shared components”导入{Nav,IconSvgs}
从“../store/actions/Types”导入{AppState,UserI,AccessRecordsI}
从“../store/actions/UserActions”导入{loadUser}
界面属性{
loadUser:()=>void
用户:UserI
}
//解散页面
常量页=()=>{
返回(
)
}
//应用路由器
export const AppRouter:React.FC=({loadUser,user}:PropsI)=>{
const userAccess=user.accessRecords.map((accessRecord:AccessRecordsI)=>{
返回accessRecord.Access\u事务
})
useffect(()=>{
loadUser()
})
返回(
)
}
const dispatch=usedpatch()
const mapDispatchToProps=()=>()=>{
分派(loadUser())
}
常量mapStateToProps=useSelector((状态:AppState)=>state.user)
导出默认连接(MapStateTrops、mapDispatchToProps)(批准者)

我不确定mapDispatchToProps语法

应该是这样吗

const mapDispatchToProps = () => {
  dispatch(loadUser())
}

您声明AppRouter需要props loaduser和user,但在App.tsx中没有这些props的情况下调用它


编辑:尽管不是问题中确定的特定TS错误的原因,如注释中所述,但它也可能导致组合
useSelector
MapStateTrops
useDispatch
mapDispatchToProps
时出现问题。现在你可能只想使用挂钩。

我明白了,但我有redux的道具?@Jack我还认为你的redux配置是错误的。您组合了
useSelector
mapstatetrops
(它们是可选的,不应该组合在一起)。还有
mapDispatchToProps
useDispatch
也不错。而且,对不起,我在评论中是指useDispatch@yaya关于等价性的观点是正确的。旁注:如果您想跨越使用TS和redux的桥梁(值得一试,IMHO),redux工具包会让这更容易,本教程特别强调:@yaya point是正确的,我们不应该同时使用[
useSelector
MapStateTrops
]。我遇到了类似的问题,这就是ts2740警告的原因。你应该加上它作为答案here@yaya,我不认为这是OP问题的原因,也不认为这是OP直接回答问题的原因,但我已经编辑并注意到了这一点。

import React, {ExoticComponent, Fragment, useEffect} from 'react'
import {BrowserRouter as Router, Switch, Route} from 'react-router-dom'
import FreeTextView from '../components/analytics/dashboard/freeTextView/FreeTextView'
import {connect, useDispatch, useSelector} from 'react-redux'
import {Nav, IconSvgs} from '@pxhub/shared-components'
import {AppState, UserI, AccessRecordsI} from '../store/actions/Types'
import {loadUser} from '../store/actions/UserActions'

interface PropsI {
  loadUser: () => void
  user: UserI
}

// Defualt Page
const Page = () => {
  return (
    <Fragment>
      <Switch>
        <Route path="/freeview" component={FreeTextView} />
      </Switch>
    </Fragment>
  )
}

// App Router
export const AppRouter: React.FC<PropsI> = ({loadUser, user}: PropsI) => {
  const userAccess = user.accessRecords.map((accessRecord: AccessRecordsI) => {
    return accessRecord.Access_Transaction
  })

  useEffect(() => {
    loadUser()
  })

  return (
    <Fragment>
      <IconSvgs />
      <Nav
        user={user}
        userAccess={userAccess}
        urlPrefix={process.env.REACT_APP_URL_PREFIX}
      />
      <Router>
        <Switch>
          <Route path="/" component={Page} />
        </Switch>
      </Router>
    </Fragment>
  )
}

const dispatch = useDispatch()

const mapDispatchToProps = () => () => {
  dispatch(loadUser())
}
const mapStateToProps = useSelector((state: AppState) => state.user)

export default connect(mapStateToProps, mapDispatchToProps)(AppRouter)

const mapDispatchToProps = () => {
  dispatch(loadUser())
}