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.
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
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
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
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
}



