gpt4 book ai didi

graphql - 如何在 GraphQL 类型中引用特定的 ENUM 值?

转载 作者:行者123 更新时间:2023-12-02 21:30:04 29 4
gpt4 key购买 nike

我有以下架构:

enum PaymentTypeName {
PAYMENT_CARD
PAYMENT_CARD_TOKEN
}

interface Payment {
id: ID!
type: PaymentTypeName!
}

type PaymentCardPayment implements Payment {
id: ID!
type: PaymentTypeName!
card: PaymentCard!
}

type PaymentCardTokenPayment implements Payment {
id: ID!
type: PaymentTypeName!
card: PaymentCard!
}

PaymentPaymentCardPaymentPaymentCardTokenPayment时,由type的值决定,即它是PAYMENT_CARDPAYMENT_CARD_TOKEN

如何在界面中表示 PaymentCardPayment/PaymentCardTokenPayment 继承 PaymentTypeName 的特定值?

我尝试了以下各种组合:

type PaymentCardPayment implements Payment {
id: ID!
type: PaymentTypeName.PAYMENT_CARD!
card: PaymentCard!
}

和:

type PaymentCardPayment implements Payment {
id: ID!
type: PaymentTypeName[PAYMENT_CARD]!
card: PaymentCard!
}

但是所有这些都提示语法错误,并且我无法找到相关文档。

最佳答案

GraphQL 不支持您尝试执行的操作。如果字段的类型声明为 PaymentTypeName,并且 PAYMENT_CARDPAYMENT_CARD_TOKEN 都是 PaymentTypeName 的有效值,则它们还必须是该字段的有效值。无法采用现有类型(无论是枚举、标量还是对象类型)并有条件地从该类型已定义的可能值集中创建可能值的子集。

也就是说,如果 PaymentCardPayment.type 始终解析为 PAYMENT_CARD 并且 PaymentCardTokenPayment.type 始终解析为 PAYMENT_CARD_TOKEN code>,那么在这里使用枚举根本没有意义。事实上,在这种特定情况下,我们可以完全省略 type 字段。毕竟,在这种情况下,该字段的唯一目的是允许客户端区分 Payment 可能解析的可能类型。然而,GraphQL 已经为我们提供了 __typename字段通过解析为已解析类型的名称来完成此操作。

因此,在这个特定实例中,只需执行以下操作就足够了:

interface Payment {
id: ID!
}

type PaymentCardPayment implements Payment {
id: ID!
card: PaymentCard!
}

type PaymentCardTokenPayment implements Payment {
id: ID!
card: PaymentCard!
}

并查询类型为Payment的字段,如下所示:

{
payments {
id
__typename
... on PaymentCardPayment {
card {
# ...
}
}
... on PaymentCardTokenPayment {
card {
# ...
}
}
}
}

关于graphql - 如何在 GraphQL 类型中引用特定的 ENUM 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44459115/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com