我有一个简单的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) => ...
答案 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
}