2016-10-27 2 views
0

Hier ist mein EventAttendee Object.Objektmutationen in graphQL

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

Die personalizedDateSelection Eigenschaft ist eine dynamische und seine Eigenschaften sind jetzt nicht bekannt. Also, In diesem Fall habe ich GraphQLInputObjectType() gegeben.

Aber es gibt einen Fehler, der angibt, EventAttendee.personalizedDateSelection Feldtyp muss Ausgabetyp sein.

Wie definiert man einen ObjectType, dessen Eigenschaften nicht bekannt sind?

Antwort

0

wollte ich personalizedDateSelection Eigentum EventAttendee von object sein, aber ich nicht diese Eigenschaften im Voraus wissen, aber ich bin sicher, dass es von Objekttyp ist.

So deklarieren dies als GraphQLScalarType war der richtige Weg, es zu tun. Check out über GraphQLScalarType. Aber wir müssen einen benutzerdefinierten Skalartyp erstellen. Alle Skalartypen können vom Eingabetyp sein. Also hier ist meine Implementierung:

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; 
    } 
}); 
0

Ich glaube, dass Sie eine InputObjectType und nicht eine ObjectType wie angegeben definieren möchten.

Mit diesem gesagt, was Sie tun können, ist personalizedDateSelection als eine Zeichenfolge für jetzt zu deklarieren, und dann später anpassen, wie benötigt mit einem benutzerdefinierten Eingabeobjekt, sobald Sie wissen, was es enthalten sollte. GraphQLInputObjectType wird verwendet, um neue Eingabeobjekttypen zu definieren, es ist kein Typ per se.