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

GraphQL API Response Error: Fields “default” Conflict Because They Return Conflicting Types Float! and Boolean!

Reviewing the query request, I found the corresponding 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.

1. The GraphQL API response returned an error: Fields “default” conflict because they return conflicting types Float! and Boolean!. Use different aliases on the fields to fetch both if this was intentional.

JSON

{
  "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. Reviewing the query request, I found the corresponding 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. See Figure 1.

Reviewing the query request, I found the corresponding 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.
Figure 1
GraphQL

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 cause likely lies in the implementation of this interface type: the field types differ, and inline fragments were used in the query. It is Float! in ThemeSettingRange. It is Boolean! in ThemeSettingCheckbox. If you request fields with the same name (or alias) multiple times within the same selection set, the field must return the same type. See Figure 2 and Figure 3.

In the implementation of this interface type, the field types differ, and inline fragments were used in the query. It is Float! in ThemeSettingRange.
Figure 2

 

In the implementation of this interface type, the field types differ, and inline fragments were used in the query. It is Boolean! in ThemeSettingCheckbox.
Figure 3
GraphQL

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 resolve this issue. However, using aliases increases the parsing difficulty on the client side. See Figure 4.

Reference: https://github.com/graphql/graphql-js/issues/1361 . Using aliases can resolve this issue. However, using aliases increases the parsing difficulty on the client side.
Figure 4
GraphQL

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

JSON

{
  "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 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系