【问题标题】:Mimic tagged unions in GraphQL?在 GraphQL 中模拟标记的联合?
【发布时间】:2017-05-15 21:06:32
【问题描述】:

我一直在寻找 GraphQL 在我正在从事的项目中的使用。对于该项目,我们使用 Haskell 数据类型定义了整体数据结构(用于说明目的)。这包含如下类型:

data Requirement
  = Purchased PurchaseId
  | Attained Outcome Real
  | Invited

因此,对某事的要求可能是用户已购买某个项目、获得某个分数或被邀请。

通过阅读文档,我猜想 union 是我想要表达 type 的需求,但是有没有一种优雅的方式来处理 工会的每个成员的strong>内容?

提前致谢!

【问题讨论】:

    标签: graphql


    【解决方案1】:

    不用担心,我自己解决了! Interfaces 正是我需要的。

    例子:

    interface Requirement {
        id: ID!
    }
    
    type Purchased implements Requirement {
        id: ID!
        mustHavePurchased: ID!
    }
    
    # etc...
    

    【讨论】:

    • 这不是没有鉴别器字段的标记联合。鉴别器字段可以用枚举、文字类型等来实现,但是 GraphQL 不支持将特定的枚举值称为类型,并且使用文字类型过于冗长。除非您使用__typename 进行歧视。
    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 2021-09-01
    • 2019-07-02
    • 2020-10-10
    • 2020-09-22
    • 2015-04-08
    • 2020-02-04
    相关资源
    最近更新 更多