创建时无法引用 GraphQLObjectType

Unable to reference GraphQLObjectType while creating it

我正在尝试从 json 配置动态生成 graphql 方案。但是我无法为自己创建一个 GraphQLList。

json:

{
  "label": "user",
  "properties": [
    {
      "key": "name",
      "type": "string"
    },
    {
      "key": "id",
      "type": "id"
    },
    {
      "key": "birthday",
      "type": "date"
    },
    {
      "key": "gender",
      "type": "string"
    },
    {
      key: 'friends',
      type: 'string'
    }
  ]
}

javascript代码生成:

graphSchemes.forEach(function (graphScheme) {
 graphQLObjects[graphScheme.label] = new graphql.GraphQLObjectType({
  name: graphScheme.label,
  fields: graphScheme.properties.reduce((fields, property) => {
    if (property.key === 'friends') {
      fields[property.key] = {
        type: new graphql.GraphQLList(graphQLObjects[graphScheme.label])
      };
      return fields;
    }
    fields[property.key] = {
      type: TYPES[property.type]
    };
    return fields;
  }, {})
});

});

这里的问题是:

type: new graphql.GraphQLList(graphQLObjects[graphScheme.label])

没有"graphQLObjects[graphScheme.label]"

我该如何解决这个问题?有什么建议么?

通过将字段放在包装函数中,字段可以引用类型本身。

一个例子:

var routeType = new GraphQLObjectType({
  name: 'MessageRoute',
  fields: function () {
    return {
      name: {
        type: GraphQLString
      },
      routes: {
        type: new GraphQLList(routeType),
        resolve: (route) => {
          return route.routes;
        }
      }
    };
  }
});