【问题标题】:How to define recursive GraphQL type programmatically?如何以编程方式定义递归 GraphQL 类型?
【发布时间】:2017-08-18 21:57:06
【问题描述】:

比如说,我想使用 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 接口定义这样的类型?

【问题讨论】:

    标签: javascript graphql


    【解决方案1】:

    嗯,答案很简单。

    您只需将 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),
      }),
    });
    

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2021-06-09
      • 2020-10-01
      • 2021-06-14
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多