在 GraphQL API 响应报错: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、在 GraphQL API 响应报错:Fields “default” conflict because they return conflicting types Float! and Boolean!. Use different aliases on the fields to fetch both if this was intentional.
{
"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、查看查询请求,发现有相应提示: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
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、原因应该在于此接口类型的实现中,字段类型不一样,查询时使用了内联片段。在 ThemeSettingRange 中为 Float!。在 ThemeSettingCheckbox 中为 Boolean!。如果您在同一选择集中多次请求具有相同名称(或别名)的字段,则该字段必须返回相同的类型。如图2、图3
type ThemeSettingRange implements ThemeSetting
{
default: Float!
value: Float!
}
type ThemeSettingCheckbox implements ThemeSetting
{
default: Boolean!
value: Boolean!
}
4、参考:https://github.com/graphql/graphql-js/issues/1361 ,使用别名可以解决此问题。但是使用别名,会增加客户端的解析难度。如图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
}




近期评论