在 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | { "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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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
1 2 3 4 5 6 7 8 9 10 | fragment ThemeSettingRange on ThemeSettingRange { ...ThemeSettingCommon rangeDefault: default min max step unit rangeValue: value __typename } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "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 } |
近期评论