创建具有可索引字段签名的 GraphQLObjectType?

Creating a GraphQLObjectType with an indexable field signature?

我目前正在将 REST API 转换为 GraphQL,但我在其中一个端点遇到了一些障碍。

目前,这个端点returns一个对象,其键可以是一组无限的字符串,其值都匹配特定的形状。

所以,作为一个基本的例子,我有这种情况......

// 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 可以实现这种事情吗?我将如何为此创建一个 type/schema?

提前致谢!

我认为一种解决方案是使用 JSON.stringify() 方法

exampleQuery: {
    type: GraphQLString,
    resolve: (root, args, context) => {
        let obj = {
            foo: { id: 'foo', count: 3 },
            bar: { id: 'bar', count: 6 },
            baz: { id: 'baz', count: 1 }
        };

        return JSON.stringify(obj);
    }
}

然后,在检索到 GraphQL 查询的结果后,您可以使用 JSON.parse(result)(如果执行查询的部分也写在 JavaScript 中 - 否则您将不得不使用其他方法的等效方法解析传入 JSON 响应的语言)。

这种解决方案的缺点是您无法选择要从查询中检索 obj 的哪些字段,但是,正如您所说,返回的对象可以有无限的集合应用程序前端可能不知道的字符串,因此无需选择它的键,对吗?