Graphql - 如何获取所选字段的类型(String、Int、ID 等)

Graphql - How to get type (String, Int, ID etc..) of a selected field

我有以下 graphql 查询

const GET_USER = gql`
    query user() {
        user {
            firstName
            lastName
        }
    }
`

我遍历查询以使用 graphql

提供的 visit 函数查找 firstNamelastName 字段的类型
visit(GET_USER, {
    Field(node) {
      console.log(node)
    }
  }

看起来这些字段只包含以下信息。

{
      kind: 'Field',
      alias: undefined,
      name: { kind: 'Name', value: 'firstName' },
      arguments: [],
      directives: [],
      selectionSet: undefined
},
{
      kind: 'Field',
      alias: undefined,
      name: { kind: 'Name', value: 'lastName' },
      arguments: [],
      directives: [],
      selectionSet: undefined
}

没有告诉我 firstName & lastName

的类型

我希望我可能不得不使用相关的 schema file 来获取该查询的类型,但我不确定该怎么做,如果有人可以帮助我,那会很棒。

使用内省

不确定您使用的是什么平台,但 introspection 是您用来获取特定类型信息的平台。

内省是查询当前 API 架构中可用资源的能力。

用户类型示例:

{
  __type(name: "User") {
     name
     kind
  }
}

示例响应:

{
  "data": {
    "__type": {
      "name": "User",
      "kind": "OBJECT"
    }
  }
}

您也可以使用内省来钻取字段:

{
  __type(name: "User") {
    name
    fields {
      name
      type {
        name
        kind
      }
    }
  }
}

示例响应:

{
  "data": {
    "__type": {
      "name": "User",
      "fields": [
        {
          "name": "id",
          "type": {
            "name": null,
            "kind": "NON_NULL",
            "ofType": {
              "name": "ID",
              "kind": "SCALAR"
            }
          }
        },
        {
          "name": "name",
          "type": {
            "name": null,
            "kind": "NON_NULL",
            "ofType": {
              "name": "String",
              "kind": "SCALAR"
            }
          }
        }
      ]
    }
  }
}