如何以编程方式定义递归 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 接口定义这样的类型?

嗯,答案很简单。

你只需要传递一个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),
}),
});

最新更新