graphql:使用GraphQLObjectType创建扩展变异的类型
我正在使用graphql npm包构建一个graphql模式,其中包含一个如下所示的突变:graphql:使用GraphQLObjectType创建扩展变异的类型,graphql,graphql-js,Graphql,Graphql Js,我正在使用graphql npm包构建一个graphql模式,其中包含一个如下所示的突变: type Mutation { cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost] } 我喜欢这样做,假设我有一个包含GraphQLObjectType的输入和输出变量: new GraphQLObjectType({ name: 'Mutation', fields: { [camelcase
type Mutation {
cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}
我喜欢这样做,假设我有一个包含GraphQLObjectType的输入和输出变量:
new GraphQLObjectType({
name: 'Mutation',
fields: {
[camelcase(output.toString())+'s_onSave']: {
args: {data: {type: new GraphQLList(input)},
},
type: new GraphQLList(output)
}
}
})
但我想要的是扩展类型突变以产生如下结果:
extend type Mutation {
cxUnitCosts_onSave(data: [CxUnitCostInput]): [CxUnitCost]
}
我需要扩展变异,因为我正在将大量构建的模式合并在一起,如果我不这样做,只有一个变异在合并中幸存。我不希望像下面的答案那样使用字符串操作,也不希望必须手动进行合并。我不想查看模式内部
就我个人而言,我不知道该怎么做。我相信你可以按照以下思路做一些事情:
const { parse, GraphQLSchema } = require('graphql')
const { extendSchema } = require('graphql/utilities)
const schema = new GraphQLSchema({
query: queryType,
});
const extension = `extend type Foo {
someNewField: String
}`;
const extendedSchema = extendSchema(schema, parse(extension));
但是。。。对于一个突变或任何需要自定义解析器的东西,您仍然需要从graphql工具
中添加类似addResolveFunctionsToSchema
的解析器
如果您使用SDL编写模式,单独编写解析器,然后使用makeExecutableSchema
创建模式,而不是以编程方式定义模式,则可以轻松地扩展类型
如果您提供更多关于扩展模式的原因或您试图实现的目标的上下文,我可能会建议一种更好的方法。我很遗憾,我的问题没有得到答案。最后我做的是,在管道的倒数第二步,在我将模式写入文件之前,替换字符串
replace('type Mutation', 'extend type Mutation'),
replace('type Query', 'extend type Query'),
我想有时候就是这样。我仍然很惊讶这在编程上是不可行的。我添加了一些上下文。我非常致力于以编程方式定义模式。我正在转换一堆json模式,我真的不想发出字符串来实现这一点。最终,你只需要一个具有映射到你的字段名的属性的对象。也许我错过了什么。有什么原因不能将json模式简化为这样的对象,然后最终将该对象传递给变异类型的构造函数吗?我想可以。我有许多独立处理的json模式,我宁愿使用graphql工具将它们合并在一起,而不必查看内部。