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

时间:2017-02-05 20:10:28

标签: graphql graphql-js

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

目前,此端点返回一个对象,该对象的键可以是一组无限的字符串,而且所有值都匹配某个形状。

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

// 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有可能这样吗?我将如何为此创建类型/架构?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为一种解决方案可以使用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编写的 - 否则您将不得不使用其他语言的等效方法来解析传入的{ {1}}回复)。

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