如何以编程方式定义递归GraphQL类型?

时间:2017-08-18 13:57:06

标签: javascript graphql

让我们说,例如,我想使用GraphQL JavaScript界面​​定义典型的论坛消息类型:

import {
  GraphQLString,
  GraphQLObjectType,
} from 'graphql';

const MessageType = new GraphQLObjectType({
  name: 'Message',
  fields: {
    text: { type: GraphQLString },
    comments: new GraphQLList(MessageType),
  },
});

JavaScript编译器(好吧,解释器)会抱怨这个。它会说MessageType is undefined

我们都知道可以使用GraphQL语言定义这样的类型:

type Message {
    text: String
    comments: [Message]
}

如何使用GraphQL纯JavaScript接口定义这样的类型?

1 个答案:

答案 0 :(得分:3)

嗯,答案很简单。

您只需将thunk(不带参数的函数)作为field字段传递,而不是传递纯JavaScript对象。

只有在已经定义了类型时才会执行该函数,因此,它将起作用。

结果代码如下所示:

import {
  GraphQLString,
  GraphQLObjectType,
} from 'graphql';

const MessageType = new GraphQLObjectType({
  name: 'Message',
  fields: () => ({  // <-- Notice the function definition
    text: { type: GraphQLString },
    comments: new GraphQLList(MessageType),
  }),
});