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

时间:2017-06-09 13:30:04

标签: graphql graphql-js

我有以下架构:

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!
}

Payment PaymentCardPaymentPaymentCardTokenPayment由类型值确定时,即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!
}

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

3 个答案:

答案 0 :(得分:1)

您正在尝试在类型架构中声明字段 value ,这不是架构的含义。您应该只在模式中声明字段类型,在这种情况下它只是type: PaymentTypeName。你在第一个代码块中使用它是正确的。

您的PaymentCardPayment type解析程序函数应返回枚举值,在您的情况下为PAYMENT_CARD

您的PaymentCardTokenPayment type解析器功能应返回PAYMENT_CARD_TOKEN的值。

答案 1 :(得分:1)

GraphQL不支持您要执行的操作。如果某个字段的类型声明为<button onclick="F1()">Hide Lw</button> <button id="bL1"> Lw </button>,并且PaymentTypeNamePAYMENT_CARD都是PAYMENT_CARD_TOKEN的有效值,那么它们也必须是该字段的有效值。无法采用现有的type9(无论是枚举,标量还是对象类型),并从该类型已定义的可能值集中有条件地创建可能值的子集。

也就是说,如果PaymentTypeName将始终解析为PaymentCardPayment.type,而PAYMENT_CARD将始终解析为PaymentCardTokenPayment.type,则在此处使用枚举实际上没有任何意义。完全没有实际上,在这种特定情况下,我们可以完全省略PAYMENT_CARD_TOKEN字段。毕竟,在这种情况下,该字段的唯一目的是允许客户端区分type可能解析为的可能类型。但是,GraphQL已经为我们提供了一个__typename字段,它通过解析为已解析类型的名称来完成此操作。

因此,在此特定情况下,只需执行以下操作即可:

Payment

并像这样查询类型为interface Payment { id: ID! } type PaymentCardPayment implements Payment { id: ID! card: PaymentCard! } type PaymentCardTokenPayment implements Payment { id: ID! card: PaymentCard! } 的字段:

Payment

答案 2 :(得分:0)

使用默认值对您有用吗?

currentBuild.description = "description env var if required :${env.ver}"

它不会阻止您覆盖该值,但至少应正确设置它。