GraphQL object property should be a list of strings

Mdd picture Mdd · Jun 23, 2016 · Viewed 8.3k times · Source

How do I make a schema for an object property that is an array of strings in GraphQL? I want the response to look like this:

{
  name: "colors",
  keys: ["red", "blue"]
}

Here is my Schema

var keysType = new graphql.GraphQLObjectType({
  name: 'keys',
  fields: function() {
    key: { type: graphql.GraphQLString }
  }
});

var ColorType = new graphql.GraphQLObjectType({
  name: 'colors',
  fields: function() {
    return {
      name: { type: graphql.GraphQLString },
      keys: { type: new graphql.GraphQLList(keysType)
    };
  }
});

When I run this query I get an error and no data, the error is just [{}]

query { colors { name, keys } }

However when I run a query to return just the name I get a successful response.

query { colors { name } }

How do I create a schema that returns an array of strings for when I query for keys?

Answer

Mdd picture Mdd · Jun 23, 2016

I figured out the answer. The key is to pass the graphql.GraphQLString into graphql.GraphQLList()

The schema becomes:

var ColorType = new graphql.GraphQLObjectType({
  name: 'colors',
  fields: function() {
    return {
      name: { type: graphql.GraphQLString },
      keys: { type: new graphql.GraphQLList(graphql.GraphQLString)
    };
  }
});

Using this query:

query { colors { name, keys } }

I get the desired results:

{
  name: "colors",
  keys: ["red", "blue"]
}