打字稿,反应和重构问题

问题描述 投票:1回答:1

为模糊的标题提前道歉,这是非常困难的;我的问题。

我正在尝试一起使用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)
javascript reactjs typescript recompose
1个回答
1
投票

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
    )
  )
);
© www.soinside.com 2019 - 2024. All rights reserved.