为什么我需要在组件上包含withApollo HOC以满足TypeScript编译器的需要?

时间:2018-06-08 16:50:30

标签: reactjs typescript graphql apollo react-apollo

我在应用程序中使用React,Typescript和Apollo。我有一个任意的React组件,我想渲染。该组件使用compose函数来处理来自一系列graphql查询的加载数据。

parent.tsx

<MyComponent />

myComponent.tsx

class MyComponent extends React.Component<MyComponentProps, MyComponentState> {
   // code, render, etc
    export default compose(
         graphql(queryGetSomeData, { name: "GetSomeData" }...

当我不在组件中包含任何道具时,一切都很好,Typescript编译器不会抱怨,并且应用程序呈现。当我尝试包含一个道具(任何类型)时,编译器会以下列方式抱怨:

<MyComponent doSomething={this.doSomeFunction} /> // or foo, or foo={'bar'}

[ts] Property 'doSomething' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<{}, ComponentState>> & Readonly<{ childr...'. (property) Parent.doSomething: () => aReturnType

当我将withApollo HOC添加到MyComponent的compose函数时,错误消失,编译器成功运行。

export default compose(
    withApollo,
    graphql(queryGetSomeData, { name: "GetSomeData" }...

我已阅读withApollo docs,并且通常了解withApollo提供对Apollo客户端的访问权限。但是,我的其他任何组件都没有这个限制,我很难理解a)为什么这个组件不同并且需要使用Apollo和b)withApollo如何解决这个特殊问题。

非常感谢任何指导。谢谢!

0 个答案:

没有答案