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;
}
});
这是我的 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;
}
});