创建具有可索引字段签名的GraphQLObjectType?
我目前正在将RESTAPI转换为GraphQL,但在其中一个端点中遇到了一些障碍 当前,该端点返回一个对象,该对象的键可以是一组无限的字符串,并且其值都匹配某个形状 所以,作为一个初步的例子,我有这种情况创建具有可索引字段签名的GraphQLObjectType?,graphql,graphql-js,Graphql,Graphql Js,我目前正在将RESTAPI转换为GraphQL,但在其中一个端点中遇到了一些障碍 当前,该端点返回一个对象,该对象的键可以是一组无限的字符串,并且其值都匹配某个形状 所以,作为一个初步的例子,我有这种情况 // response { foo: { id: 'foo', count: 3 }, bar: { id: 'bar', count: 6 }, baz: { id: 'baz', count: 1 }, } 同样,键在运行时是未知的,可以是一组无限的字符串 例如,
// response
{
foo: { id: 'foo', count: 3 },
bar: { id: 'bar', count: 6 },
baz: { id: 'baz', count: 1 },
}
同样,键在运行时是未知的,可以是一组无限的字符串
例如,在TypeScript中,这种情况是通过使用可索引字段签名创建接口来处理的,如
interface Data {
id: string;
count: number;
}
interface Response {
[key: string]: Data;
}
所以,我的问题是:graphql有可能实现这种功能吗?我将如何为此创建类型/模式
提前谢谢 我认为一种解决方案是使用
JSON.stringify()
方法
示例查询:{
类型:GraphQLString,
解析:(根、参数、上下文)=>{
设obj={
foo:{id:'foo',计数:3},
酒吧:{id:'bar',计数:6},
baz:{id:'baz',计数:1}
};
返回JSON.stringify(obj);
}
}
然后,在检索GraphQL查询的结果后,您可以使用JSON.parse(result)
(如果执行查询的部分也是用JavaScript编写的,那么您必须使用其他语言的等效方法来解析传入的JSON
响应)
这种解决方案的缺点是,您无法选择要从查询中检索的
obj
的哪些字段,但是,正如您所说,返回的对象可以有无限的字符串集,这些字符串在应用程序前端可能是未知的,因此无需选择其键,我说得对吗?谢谢你的反馈。抱歉耽搁了!对于一个特定的路由,我最终使用了类似的方法,但也只是在类型的resolve方法中将类似的响应转换为数组。换句话说<代码>解析:myObj=>Object.keys(myObj.map)(key=>({key,value:myObj[key]}))代码>