【问题标题】:TS2322: Type 'object' is not assignable to type 'Store'TS2322:类型“对象”不可分配给类型“存储”
【发布时间】:2018-10-05 08:47:49
【问题描述】:

我有一个简单的 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
}

附: 我承认,如果我从参数 store 中删除括号,则类型检查可以正常工作,例如: const AppContainer: React.SFC&lt;Props&gt; = (store) =&gt; ...

【问题讨论】:

    标签: reactjs typescript react-redux


    【解决方案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) =&gt;,您也可以选择您自己的类型检查解决方案。两种方式没有什么不同。您可以自行选择其中之一。

    【讨论】:

    • 谢谢!我已经用第二种方法解决了我的问题。它完美地工作。无论如何,谢谢你的帮助!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 2017-04-10
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多