没有不值得去解决的问题,也没有不值得去学习的技术!

Response error in the GraphQL API: fields “default” because they return Conflicting types float! and boolean!. use Different aliases on the fields to fetch both if this was interested.

查看查询请求,发现有相应提示:Fields "default" conflict because they return conflicting types "Float!" and "Boolean!". Use different aliases on the fields to fetch both if this was intentional.

1. Respond to the GraphQL API and report an error: fields “default” cause they return conflicting types float! and boolean!. use Different aliases on the fields to fetch both if this was interested.


{
  "errors": [
    {
      "message": "Fields \"default\" conflict because they return conflicting types Float! and Boolean!. Use different aliases on the fields to fetch both if this was intentional.",
      "extensions": {
        "category": "graphql"
      },
      "locations": [
        {
          "line": 134,
          "column": 3
        },
        {
          "line": 145,
          "column": 3
        }
      ]
    },
    {
      "message": "Fields \"value\" conflict because they return conflicting types Float! and Boolean!. Use different aliases on the fields to fetch both if this was intentional.",
      "extensions": {
        "category": "graphql"
      },
      "locations": [
        {
          "line": 139,
          "column": 3
        },
        {
          "line": 146,
          "column": 3
        }
      ]
    }
  ]
}


2. Check the query request and find that there is a corresponding prompt: fields “default” cause they return conflicting types “float!” and “boolean!”. Use different aliases on the fields to fetch both if this was interested. as shown in Figure 1

查看查询请求,发现有相应提示:Fields "default" conflict because they return conflicting types "Float!" and "Boolean!". Use different aliases on the fields to fetch both if this was intentional.
Figure 1

query OnlineStoreTheme($themeId: ID!) {
  onlineStoreTheme(themeId: $themeId) {
    themeSettingsCategories {
      ...ThemeSettingsCategory
      __typename
    }
    __typename
  }
}

fragment ThemePreset on ThemePreset {
  id
  settings {
    ...ThemeStyleSetting
  }
  sections {
    id
    sectionId
    disabled
    schema {
      blockSchemas {
        id
        limit
        name
        settings {
          id
          info
          label
          settingId
          type
        }
        type
      }
    }
  }
}

fragment ThemeStyleSetting on ThemeStyleSetting {
  id
  settingId
  value
  type
}

fragment ThemeSettingsCategory on ThemeSettingsCategory {
  id
  title
  settings {
    ...ThemeSetting
    __typename
  }
  __typename
}

fragment ThemeSetting on ThemeSetting {
  ... on ThemeSettingRange {
    ...ThemeSettingRange
    __typename
  }
  ... on ThemeSettingCheckbox {
    ...ThemeSettingCheckbox
    __typename
  }
  __typename
}

fragment ThemeSettingCommon on ThemeSetting {
  id
  info
  label
  settingId
  type
  __typename
}

fragment ThemeSettingRange on ThemeSettingRange {
  ...ThemeSettingCommon
  default
  min
  max
  step
  unit
  value
  __typename
}

fragment ThemeSettingCheckbox on ThemeSettingCheckbox {
  ...ThemeSettingCommon
  default
  value
  __typename
}



3. The reason should be that in the implementation of this interface type, the field type is different, and the inline fragment is used during the query. Float! in ThemeSettingRange. Boolean! in ThemeSettingCheckBox. If you request fields with the same name (or alias) multiple times in the same selection set, the field must return the same type. Figure 2, Figure 3

此接口类型的实现中,字段类型不一样,查询时使用了内联片段。在 ThemeSettingRange 中为 Float!。
Figure 2

 

此接口类型的实现中,字段类型不一样,查询时使用了内联片段。在 ThemeSettingCheckbox 中为 Boolean!
Figure 3

type ThemeSettingRange implements ThemeSetting
{

    default: Float!

    value: Float!
}

type ThemeSettingCheckbox implements ThemeSetting
{

    default: Boolean!


    value: Boolean!
}


4. Reference:https://github.com/graphql/graphql-js/issues/1361, using aliases can solve this problem. But using aliases will increase the difficulty of the client’s resolution. as shown in Figure 4

参考:https://github.com/graphql/graphql-js/issues/1361 ,使用别名可以解决此问题。但是使用别名,会增加客户端的解析难度。
Figure 4

fragment ThemeSettingRange on ThemeSettingRange {
  ...ThemeSettingCommon
  rangeDefault: default
  min
  max
  step
  unit
  rangeValue: value
  __typename
}



{
  "id": "96b1c8b9-5b18-4760-9e26-50ab009ac011/settings/radius__image",
  "info": null,
  "label": "图片圆角度数",
  "settingId": "radius__image",
  "type": "RANGE",
  "__typename": "ThemeSettingRange",
  "rangeDefault": 0,
  "min": 0,
  "max": 24,
  "step": 1,
  "unit": null,
  "rangeValue": 0
}


 

 

需要长期技术维护或远程问题排查?

我是拥有 15+ 年经验的 PHP / Go 后端工程师,长期关注已有系统维护、Bug 修复、性能优化、服务器排查、WordPress 网站维护和小功能迭代。

如果你的项目遇到以下情况,可以先从一次小问题排查开始合作:

  • ✅ PHP / Laravel / Yii2 老项目无人维护
  • ✅ Go / Gin 后端接口需要排查或优化
  • ✅ WordPress 网站访问慢、报错或插件冲突
  • ✅ Nginx / MySQL / Redis / Linux 服务器异常
  • ✅ CDN / Cloudflare / DNS / HTTPS 配置问题
  • ✅ 需要长期远程技术支持或兼职维护

更多介绍请查看:关于我 & 合作

微信:13980074657
邮箱:shuijingwanwq@gmail.com
Telegram:@shuijingwan
GitHub:https://github.com/shuijingwan

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理