为模糊的标题提前道歉,这是非常困难的;我的问题。
我正在尝试一起使用React,Recompose和Typescript,但是当我尝试将props传递给我的组件时,我收到以下错误:
[ts] Property 'bar' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<{}, any, any>> & Readonly<{ children?: ReactNode; }> & Readonly<{}>'.
组件是这样导入的:
import TestComponent from './TestComponent'
并且这样称呼:
<TestComponent bar="hello"/>
这是我的组件文件夹的结构:
├── TestComponent.tsx
├── TestComponentContainer.ts
└── index.ts
index.ts
如下:
import TestComponentContainer from './TestComponentContainer'
export default TestComponentContainer
TestComponent.jsx
如下:
import * as React from 'react'
interface IProps {
foo: string
bar: string
}
const TestComponent: React.SFC<IProps> = ({ foo, bar }) => (
<div>
<p>{foo}</p>
<p>{bar}</p>
</div>
)
export default TestComponent
TestComponentContainer.ts
如下:
import { compose, withProps } from 'recompose'
import TestComponent from './TestComponent'
export default compose(
withProps({
foo: 'stringy string string',
}),
)(TestComponent)
我知道我错过了某种类型的声明,这些声明正在通过,但是在我的生活中无法确定我应该做些什么。
编辑:
此外,如何使用嵌套方法执行此操作:
export default compose(
setDisplayName('PlayerCardContainer'),
withMutation(mutation),
withHandlers(createHandlers),
)(PlayerCard)
typing for compose is very generic允许您指定生成的组件的类型以及可以在but it doesn't ensure the type safety or compatibility of the functions handed to it上调用的组件的类型。
出于这个原因,最好避免使用compose
并简单地嵌套HOC调用:
import { withProps } from 'recompose';
import TestComponent from './TestComponent';
export default withProps({
foo: 'stringy string string',
})(TestComponent);
编辑:
对于添加的代码示例,嵌套HOC而不是使用compose
将如下所示:
export default setDisplayName('PlayerCardContainer')(
withMutation(mutation)(
withHandlers(createHandlers)(
PlayerCard
)
)
);