尝试使用 React Apollo Query 组件进行 GraphQL 查询,打字稿导致错误

Mig*_*inn 3 typescript reactjs graphql react-apollo

我正在尝试使用 Apollo 查询 GraphQl API。我正在用打字稿在 React 中执行此操作,但我无法让查询组件停止抛出错误。我对整个组合很陌生,所以我可能做了一些明显错误的事情。有任何想法吗?

这是错误:

Type '{ children: (string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]; query: any; }' is not assignable to type 'Pick<Readonly<QueryProps<any, OperationVariables>> & Readonly<{ children?: ReactNode; }>, "children" | "displayName" | "skip" | "onCompleted" | "onError" | "ssr" | "variables" | ... 6 more ... | "partialRefetch">'.
  Types of property 'children' are incompatible.
    Type '(string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]' is not assignable to type '((result: QueryResult<any, OperationVariables>) => ReactNode) | (((result: QueryResult<any, OperationVariables>) => ReactNode) & string) | (((result: QueryResult<any, OperationVariables>) => ReactNode) & number) | ... 4 more ... | (((result: QueryResult<...>) => ReactNode) & ReactPortal)'.
      Type '(string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]' is not assignable to type '((result: QueryResult<any, OperationVariables>) => ReactNode) & ReactNodeArray
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import React from 'react';
import gql from "graphql-tag";
import { Query } from "react-apollo";


export interface LoginProps { 
    data: object; item: string; query: object; loading: string; error: string;
 };

 const getLogin =
    gql`
        {
        viewer {
            login
            }
        }
    `;

export class Test extends React.Component<LoginProps, {}> { 
    <Query query={getLogin}>
            {({ loading, error, data }) => {
                if (loading) return <p>Loading...</p>;
                if (error) return <p>Error!</p>;

                return data.viewer.map( item => {
                    <div key={item.login}>
                        <p>{item.login}</p>
                    </div>
                });
            }};
    </Query>
};

export default Test;
Run Code Online (Sandbox Code Playgroud)

YEV*_*EVY 5

显然不相关,但对于那些来这里寻找答案的人来说,从内部解构Query如下:

    <Query query={getLogin}>
        {(result: QueryResult) => {
          const { loading, error, data } = result;

            // ...rest here
            if (loading) return <p>Loading...</p>;
            if (error) return <p>Error!</p>;

            return data.viewer.map( item => {
                <div key={item.login}>
                    <p>{item.login}</p>
                </div>
            });
        }};
</Query>
Run Code Online (Sandbox Code Playgroud)