TS2322:无法将类型“对象”分配给类型“存储”

时间:2018-10-05 08:47:50

标签: reactjs typescript react-redux

我有一个简单的TypeScript组件,在其中尝试实现类型检查,但是我无法弄清楚下一部分代码出了什么问题:

import React from 'react'
import { Provider } from 'react-redux'
import { Title } from '../components'
import { Props } from './types'

const AppContainer: React.SFC<Props> = ({ store }) => {
  return (
    <Provider store={store}>
      <Title />
    </Provider>
  )
}

export default AppContainer

因为我总是遇到错误:

  

TS2322:类型'object'不可分配给'Store'类型。类型“ {}”中缺少属性“ dispatch”。

组件接口:

export interface Props {
  store: object,
  dispatch(): any,
  getState(): any,
  subscribe(): any,
  replaceReducer(): any
}

P.S。 我承认,如果我从参数store中删除括号,则类型检查可以正常工作,例如: const AppContainer: React.SFC<Props> = (store) => ...

2 个答案:

答案 0 :(得分:1)

所以:

P.S. I admit, that Type checking works fine if I remove bracers from the argument store, like: const AppContainer: React.SFC<Props> = (store) => ...

是的,这是完全正确的!因此,针对您的情况的解决方案非常简单:

const AppContainer = ({ store }: Props) => {
  return (
    <Provider store={store}>
      <Title />
    </Provider>
  )
}

这是因为您以破坏性方式声明了函数参数。如果您选择非破坏性的= (store) =>,则还可以选择自己的类型检查解决方案。两种方式没有什么不同。您可以自己选择其中之一。

答案 1 :(得分:0)

我认为它应该是对象O的大写O。

export interface Props {
  store: Object,
  dispatch(): any,
  getState(): any,
  subscribe(): any,
  replaceReducer(): any
}