How do I specify a graphql type that takes multiple types?

Deepank picture Deepank · Jun 12, 2018 · Viewed 17.5k times · Source

I want to create a graphql type that can return either an Array of Integers or String.

I've already tried using union in the form union CustomVal = [Int] | String, but this returns an error.

The schema declaration is:

union CustomValues = [Int] | String

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

The error is:

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

Is this possible to do in graphql? If not, can you please suggest an alternative to do this.

I ask this as the union documentation says that 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.

Any solutions would be highly helpful.

Answer

Rajat Sharma picture Rajat Sharma · Jun 12, 2018

Follow this https://github.com/facebook/graphql/issues/215, Graphql does not support scaler union types currently, you can do this

union IntOrString = IntBox | StringBox

type IntBox {
  value: Int
}

type StringBox {
  value: String
}

or you can have your custom type, see this graphql, union scalar type?