如何指定采用多种类型的 graphql 类型?

Posted

技术标签:

【中文标题】如何指定采用多种类型的 graphql 类型?【英文标题】:How do I specify a graphql type that takes multiple types? 【发布时间】:2018-11-21 09:04:18 【问题描述】:

我想创建一个可以返回Array of IntegersString 的graphql 类型。

我已经尝试在表单中使用 union union CustomVal = [Int] | String,但这会返回错误。

架构声明是:

union CustomValues = [Int] | String

type Data 
    name: String
    slug: String
    selected: Boolean
    values: CustomValues

错误是:

node_modules/graphql/error/syntaxError.js:24
return new _GraphQLError.GraphQLError('Syntax Error: ' + description, undefined, source, [position]);
Syntax Error: Expected Name, found [
GraphQL request (81:23)
80: 
81:     union CustomValues = [Int] | String

这可以在graphql中做到吗?如果没有,您能否提出一个替代方案。

我问这个,因为工会文档说Note that members of a union type need to be concrete object types; you can't create a union type out of interfaces or other unions.

任何解决方案都会非常有帮助。

【问题讨论】:

您可以尝试从[Int] 中删除[] 吗? 仍然抛出错误,我希望该类型采用Array of IntegersString,并且不是在graphql 中使用[] 声明的数组类型?错误是Union type CustomValues can only include Object types, it cannot include Int. Union type CustomValues can only include Object types, it cannot include String. 如果你想要一个列表(数组),你需要使用[],但是如果你想在不同的输入上返回不同的类型,那么你必须在你的解析器函数中定义如何做到这一点. 【参考方案1】:

关注这个https://github.com/facebook/graphql/issues/215,Graphql 目前不支持缩放联合类型,你可以这样做

union IntOrString = IntBox | StringBox

type IntBox 
  value: Int


type StringBox 
  value: String

或者你可以有你的自定义类型,看到这个graphql, union scalar type?

【讨论】:

以上是关于如何指定采用多种类型的 graphql 类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 graphQL 中编写 JOIN 或从多种类型中获取结果 - AWS App sync iOS

通过 AWS AppSync GraphQL API 使用多种授权类型

为 NestJs GraphQL 查询装饰器设置多种返回类型

你如何在 GraphQL 中处理多个类型的数组(例如:不同的内容块)?

在 Gatsby-node.js 中检索多种数据类型时,graphql 重复文档错误

如何使用类型提示为参数指定多种类型? [复制]