Несколько встроенных типов для graphql

Как я могу создать несколько типов для graphql? У меня есть этот код:

status: {
  type: GraphQLString || GraphQLBoolean,
  resolver: Blahblah
}

очевидно, это не работает, потому что оно преобразует логическое значение в строку, я хочу поддерживать как логическое значение, так и строку.

Я не могу просто сделать их строковыми и настроить код, потому что другие проекты используют их, и это займет некоторое время после того, как я смогу связаться с другими разработчиками, и да, у нас есть неверные данные в нашей базе данных.

Заранее спасибо.


person I am L    schedule 07.07.2017    source источник


Ответы (1)


GraphQL — это специфичность. В спецификации преднамеренно очень мало места для двусмысленности, даже если она устраняет удобные ярлыки, я думаю, что одним из решений проблемы здесь может быть тип Union, посредством которого вы определяете тип, который является объединением других типов, например

type StringType {
  fieldName: String
}

type BooleanType {
  fieldName: Boolean
}

union StringBool = StringType | BooleanType

myQuery(someArg: String!): StringBool

Имейте в виду, что это допустимый тип только в качестве возвращаемого значения для запросов. Это неприемлемый тип ввода для мутаций. Когда вы указываете поля, которые вы хотите вернуть из своего запроса, вам придется «фрагментировать» разные типы и объяснить, какие поля вы хотите получить от каждого возможного члена объединения:

... on StringType {
  fieldName
}
... on BooleanType {
  fieldName
}
person mstorkson    schedule 07.07.2017