2016-10-27 71 views
0

這是我的EventAttendee對象。graphQL中的對象突變

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

personalizedDateSelection屬性是一個動態的和它的性質不會現在已知的。所以,在這種情況下,我已經給出了GraphQLInputObjectType()

但它給出了一個錯誤,說明EventAttendee.personalizedDateSelection字段類型必須是輸出類型。

如何定義其屬性未知的ObjectType?

回答

0

我想personalizedDateSelectionEventAttendee的屬性爲的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; 
    } 
}); 
0

我相信你想定義一個InputObjectType而不是ObjectType如上所述。

就這麼說,你可以做的就是現在聲明personalizedDateSelection作爲一個字符串,然後稍後根據需要用自定義輸入對象來調整它,一旦你知道它應該包含什麼。 GraphQLInputObjectType用於定義新的輸入對象類型,它不是一個類型本身