graphQL 中的对象突变

Object mutations in graphQL

这是我的 EventAttendee 对象。

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

personalizedDateSelection 属性 是动态的,其属性现在未知。所以,在这种情况下,我给出了 GraphQLInputObjectType()

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

如何定义属性未知的 ObjectType?

我相信你想定义一个 InputObjectType 而不是所述的 ObjectType

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

我希望 personalizedDateSelection 属性 of EventAttendee 是 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;
    }
});