【问题标题】:Object mutations in graphQLgraphQL 中的对象突变
【发布时间】:2017-03-09 13:42:29
【问题描述】:

这是我的 EventAttendee 对象。

const EventAttendee = new GraphQLInputObjectType({
  name: 'EventAttendee',
  fields: () => ({
    attendeeName: {type: GraphQLString},
    personalizedDateSelection: {type: new GraphQLInputObjectType()}
  })
});

personalizedDateSelection 属性是一个动态属性,现在还不知道它的属性。所以,在这种情况下,我给出了 GraphQLInputObjectType()

但它给出了一个错误说明 EventAttendee.personalizedDateSelection 字段类型必须是输出类型。

如何定义属性未知的ObjectType?

【问题讨论】:

    标签: graphql graphql-js


    【解决方案1】:

    我相信您想要定义 InputObjectType 而不是所述的 ObjectType

    话虽如此,您现在可以将personalizedDateSelection 声明为一个字符串,然后在您知道它应该包含什么后,根据需要使用自定义输入对象对其进行调整。 GraphQLInputObjectType 用于定义new输入对象类型,它不是类型本身

    【讨论】:

      【解决方案2】:

      我希望 EventAttendeepersonalizedDateSelection 属性是 objectType,但我事先不知道这些属性,但我确信它是 Object 类型。

      因此,将其声明为 GraphQLScalarType 是正确的做法。查看GraphQLScalarType。但是我们需要创建一个自定义的标量类型。所有标量类型都可以是输入类型。所以这是我的实现:

      const PersonalizedDateSelection = new GraphQLScalarType({
          name: 'PersonalizedDateSelection',
          serialize: value => {
            return value;
          },
          parseValue: value => {
            return value;
          },
          parseLiteral: ast => {
            console.log("coming in parseLiteral");
            console.log(ast);
            let value = {};
            if (ast.kind !== Kind.OBJECT) {
              throw new GraphQLError("Query error: Can only parse object but got a: " + ast.kind, [ast]);
            }
            ast.fields.forEach(field => {
              value[field.name.value] = parseJSONLiteral(field.value);
            });
      
            return value;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2020-04-05
        • 2017-02-07
        • 2021-05-08
        • 2019-03-09
        • 2020-08-16
        • 2022-10-31
        • 2020-05-18
        • 2023-03-12
        • 2018-07-14
        相关资源
        最近更新 更多