При построении схемы с вложенными пользовательскими типами вы просто устанавливаете тип поля на ссылку вашего другого созданного типа:
const WeatherType = new GraphQLObjectType({
name: 'Weather',
fields: {
id: {
type: GraphQLInt,
}
main: {
type: GraphQLString,
}
description: {
type: GraphQLString,
}
icon: {
type: GraphQLString,
}
}
})
const MainType = new GraphQLObjectType({
name: 'Main',
fields: {
temp: {
type: GraphQLFloat,
}
pressure: {
type: GraphQLFloat,
}
humidity: {
type: GraphQLFloat,
}
tempMin: {
type: GraphQLFloat,
resolve: (obj) => obj.temp_min
}
tempMax: {
type: GraphQLFloat,
resolve: (obj) => obj.temp_max
}
}
})
const WeatherSummaryType = new GraphQLObjectType({
name: 'WeatherSummary',
fields: {
weather: {
type: new GraphQLList(WeatherType),
}
main: {
type: MainType,
}
}
})
Будьте осторожны при формировании существующих ответов JSON в схемах GraphQL - это легко пережить из-за различий в структуре. Например, поле main
в вашем примере ответа является объектом, но поле weather
на самом деле является массивом, поэтому мы должны заключить его в GraphQLList
при указании типа для поля.