В GraphQL.js с каждым значением перечисления в типе перечисления может быть связано значение. Установка этого значения не является обязательной; по умолчанию используется строковое представление имени значения. То есть для перечисления вроде:
enum ExampleEnum {
FOO
BAR
}
по умолчанию, значение для FOO
будет "FOO"
. Если вы используете graphql-tools
для построения своей схемы (или apollo-server
, который использует graphql-tools
под капотом`), мы можем передать значения для типа Enum прямо в наших преобразователях:
const resolvers = {
Query: {
example: () => 11, // field with ExampleEnum type
},
ExampleEnum: {
FOO: 11,
BAR: 23,
},
}
Как только мы это сделаем, мы можем вернуть определенное значение в наш преобразователь, и оно будет сериализовано в соответствующее значение Enum. Примечание: то же самое верно для перечислений, которые используются в качестве аргументов - если в качестве аргумента передано FOO
, преобразователь фактически получит значение 11
.
Отсутствие значений эквивалентно действию:
ExampleEnum: {
FOO: 'FOO',
BAR: 'BAR',
}
Также стоит отметить, что предоставление значений не влияет на то, как значения перечисления отображаются в ответе. Когда результат выполнения сериализуется в JSON, значения перечисления всегда отображаются в виде строковых значений, которые соответствуют именам значений перечисления (то есть "FOO"
и "BAR"
в нашем примере).
А как насчет ванильного GraphQL.js?
Значения для перечисляемых значений также могут быть предоставлены, если вы определяете свою схему программно. Вот эквивалент приведенного выше примера:
const ExampleEnumType = new GraphQLEnumType({
name: 'ExampleEnum',
values: {
FOO: {
value: 11,
},
BAR: {
value: 23,
},
},
})