这是我的EventAttendee对象。
const EventAttendee = new GraphQLInputObjectType({
name: 'EventAttendee',
fields: () => ({
attendeeName: {type: GraphQLString},
personalizedDateSelection: {type: new GraphQLInputObjectType()}
})
});
personalizedDateSelection 属性是动态属性,现在不知道其属性。所以,在这种情况下,我已经给出了 GraphQLInputObjectType()。
但是它给出了一个错误,指出 EventAttendee.personalizedDateSelection字段类型必须是输出类型。
如何定义其属性未知的ObjectType?
答案 0 :(得分:0)
我认为你想要定义一个InputObjectType
而不是ObjectType
。
话虽如此,你可以做的是现在将personalizedDateSelection
声明为一个字符串,然后在你知道它应该包含的内容后,根据需要使用自定义输入对象进行调整。 GraphQLInputObjectType
用于定义新输入对象类型,它不是本身的类型。
答案 1 :(得分:0)
我希望 EventAttendee 的 personalizedDateSelection 属性属于objectType但我事先并不知道这些属性,但我确信它属于对象类型。
因此将此声明为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;
}
});