无法使用 graphq-request

问题描述

我一直使用 graphql-request 库作为我的 GraphQL 客户端选择,从第一印象开始,一切都很简单,直到我开始发送一个嵌套的对象数组,从而用 GraphQL 文档变量表示数据模式。通常使用 apollo,您可以在查询和更改之前定义数据模式和类型,但我不确定如何使用 graphql-request 库来做到这一点。

实际数据是这样的

const contacts = [
  {
    recordID: '4B6987A1-4179-426A-B38A-8B122995D0F8:ABPerson',givenname: 'test',phoneNumbers: [
      {
        label: 'mobile',number: '123456789',},],}
]

突变看起来像这样

const TEST_MUTATION = gql`
  mutation TestMutation($contacts: /* how to define the type of the data here???*/) {
    testMutation(contacts: $contacts) {
      recordID,givenname,phoneNumbers {
        label,number
      }
    }
  }
`;

如果这个问题让您感到困惑,有没有一种方法可以让 graphql-request 库定义输入类型并获得类似 apollo 的类型?

解决方法

apollo-clientgraphql-request 都是发出标准 GraphQL 请求的 GraphQL 客户端——无论您使用什么客户端(或者如果您使用 fetchcurl 或其他方式)。

变量 $contacts 被用作字段 contacts 上的 testMutation 参数的值,因此其类型必须与该参数的类型匹配。换句话说,无论 contacts 的类型是什么,都需要是 $contacts 变量的类型。什么类型完全取决于您将查询发送到的端点的架构。您可以通过检查架构或参考 API 的文档来发现这一点。如果您还对服务器进行了编码,那么您应该已经知道类型。