Как указать тип graphql, который принимает несколько типов?

Я хочу создать тип graphql, который может возвращать либо Array of Integers, либо String.

Я уже пробовал использовать объединение в форме union CustomVal = [Int] | String, но возвращает ошибку.

Объявление схемы:

union CustomValues = [Int] | String

type Data {
    name: String
    slug: String
    selected: Boolean
    values: CustomValues
}

Ошибка:

node_modules/graphql/error/syntaxError.js:24
return new _GraphQLError.GraphQLError('Syntax Error: ' + description, undefined, source, [position]);
Syntax Error: Expected Name, found [
GraphQL request (81:23)
80: 
81:     union CustomValues = [Int] | String

Можно ли это сделать в graphql? Если нет, не могли бы вы предложить альтернативу для этого?

Я спрашиваю об этом, поскольку в документации союза говорится, что Note that members of a union type need to be concrete object types; you can't create a union type out of interfaces or other unions.

Любые решения были бы очень полезны.

Можете попробовать удалить [] из [Int]?

Neeraj Wadhwa 12.06.2018 06:19

По-прежнему выдает ошибку, и я хочу, чтобы тип принимал либо Array of Integers, либо String, а тип массива не объявлен в graphql с использованием []? Ошибка Union type CustomValues can only include Object types, it cannot include Int. Union type CustomValues can only include Object types, it cannot include String.

Deepank 12.06.2018 07:16

Вам нужно использовать [], если вам нужен список (массив), но если вы хотите возвращать разные типы на разных входах, вам нужно будет определить, как это сделать, в вашей функции преобразователя.

Neeraj Wadhwa 12.06.2018 07:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
15
3
20 519
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Следуйте этому https://github.com/facebook/graphql/issues/215, Graphql в настоящее время не поддерживает типы объединения масштабирования, вы можете сделать это

union IntOrString = IntBox | StringBox

type IntBox {
  value: Int
}

type StringBox {
  value: String
}

или вы можете иметь свой собственный тип, см. этот graphql, объединение скалярного типа?

Другие вопросы по теме