Почему мне нужно включить withApollo HOC в компонент, чтобы удовлетворить компилятор TypeScript? - PullRequest
0 голосов
/ 08 июня 2018

Я использую 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 кcompose функция MyComponent, ошибка исчезает и компилятор работает успешно.

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

Я прочитал с помощью документов Apollo и в целом понимаю, что с помощью Apollo предоставляется доступ к Apollo.клиент.Тем не менее, ни один из моих других компонентов не имеет этого ограничения, и я пытаюсь понять, а) почему этот компонент отличается и требует с помощью Apollo и б) как с помощью Apollo решает эту конкретную проблему.

Любое руководство будет высоко оценено,Спасибо!

...