2017-06-09 1 views
1

Ich habe folgendes Schema:Wie wird auf einen bestimmten ENUM-Wert im GraphQL-Typ verwiesen?

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

Wenn PaymentPaymentCardPayment oder PaymentCardTokenPayment wird durch den Wert des Typs bestimmt ist, das heißt, es entweder PAYMENT_CARD oder PAYMENT_CARD_TOKEN ist.

Wie kann ich in der Schnittstelle angeben, dass PaymentCardPayment/PaymentCardTokenPayment einen bestimmten Wert von PaymentTypeName erben?

Ich habe verschiedene Kombinationen ausprobiert:

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

und:

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

aber alle diese prompt einen Syntaxfehler und ich war nicht in der Lage, die entsprechenden Unterlagen zu finden.

Antwort

0

Sie versuchen, das Feld Wert in Ihrem Typschema zu deklarieren, wofür ein Schema nicht gedacht ist. Sie sollten nur Ihr Feld Typ innerhalb Ihres Schemas deklarieren, in diesem Fall ist es nur type: PaymentTypeName. Sie haben es in Ihrem ersten Codeblock richtig gemacht.

Ihre PaymentCardPayment 's type Resolver-Funktion sollte den Wert der Enumeration in Ihrem Fall PAYMENT_CARD zurückgeben.

Ihre PaymentCardTokenPaymenttype Resolver-Funktion sollte den Wert PAYMENT_CARD_TOKEN zurückgeben.

+0

stimme ich nicht zu. ENUM ist ein Sonderfall. 'PaymentType' Kontext macht es Sinn, dass' type' beliebige Werte des 'PaymentTypeName' erben kann. Im Zusammenhang mit "PaymentCardPayment" ist es jedoch irreführend zu sagen, dass der Wert einer der ENUM-Werte ist. es ist nicht. Es ist ein konstanter Wert, der eine Teilmenge von "PaymentTypeName" ist. – Gajus

Verwandte Themen