You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL中如何实现类型转换?如何访问不同类型的专属字段?

问题描述

比如,通过GitHub Explorer可以获取拉取请求的不同类型时间线项(本示例中为PULL_REQUEST_COMMIT和PULL_REQUEST_REVIEW):

{
  repository(name: "react", owner: "facebook") {
    pullRequests(last: 10) {
      nodes {
        number
        timelineItems(last: 10, itemTypes: [PULL_REQUEST_COMMIT, PULL_REQUEST_REVIEW]) {
          nodes {
            __typename
          }
        }
      }
    }
  }
}

现在我该如何访问PullRequestEvent或PullRequestReviewEvent类型的不同字段?换句话说,GraphQL中是否支持类型转换或条件判断?


解决方案

GraphQL支持针对不同类型的字段访问,核心实现方式是内联片段(inline fragments),这是处理接口或联合类型字段差异的标准方案,相当于基于类型的条件处理逻辑。

针对你的场景,要获取PullRequestEvent和PullRequestReviewEvent的专属字段,只需在查询中为特定类型编写内联片段即可,示例查询如下:

{
  repository(name: "react", owner: "facebook") {
    pullRequests(last: 10) {
      nodes {
        number
        timelineItems(last: 10, itemTypes: [PULL_REQUEST_EVENT, PULL_REQUEST_REVIEW_EVENT]) {
          nodes {
            __typename
            # 仅当节点为PullRequestEvent类型时,返回以下字段
            ... on PullRequestEvent {
              action
              createdAt
              actor {
                login
              }
            }
            # 仅当节点为PullRequestReviewEvent类型时,返回以下字段
            ... on PullRequestReviewEvent {
              action
              review {
                state
                body
              }
            }
          }
        }
      }
    }
  }
}

核心要点:

  • __typename字段用于确认当前节点的具体类型,方便调试和区分不同时间线项
  • ... on [目标类型名]是内联片段的语法,只有当节点属于该类型时,片段内的字段才会被返回
  • 你可以根据GitHub GraphQL API的类型定义,添加对应类型的专属字段,比如PullRequestEvent的action、actor,PullRequestReviewEvent的review等

这种方式就实现了类似“类型转换/条件判断”的效果,让你能在同一个查询中处理不同类型的时间线项,获取各自的专属字段。


内容的提问来源于stack exchange,提问作者Michael Dorner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:48:36