Из спецификации:
Объединения GraphQL представляют собой объект, который может быть одним из списка типов объектов GraphQL, но не предусматривает никаких гарантированных полей между этими типами.
Союзы не могут включать скаляры или списки;они могут включать только типы.Это означает, что союз не подходит для того, что вы пытаетесь достичь.Более того, поле может возвращать только один скаляр, тип, объединение или интерфейс, поэтому нет никакого способа вернуть один из чего-либо или массив этого чего-либо.
Однако вы можете использовать собственный скаляр для созданияповедение, которое вы ищете.Документы Apollo прекрасно описывают, как создавать и реализовывать свои собственные скаляры, так что вы можете найти там .Для вашего конкретного случая, однако, я думаю, что уже есть скаляр, который бы сработал - graphql-type-json .Я полагаю, что и строка, и массив строк будут допустимыми значениями JSON, поэтому они должны работать с этой библиотекой.
В заключение, я бы не советовал проектировать вашу схему таким способом.Вы фактически теряете валидацию типа для этого поля и вносите ненужную двусмысленность в отношении того, к чему будет обращаться это поле.На любом клиенте, использующем ваш API, будет значительно проще всегда возвращать массив строк.Если ваша база данных возвращает одну строку, просто оберните ее в массив, прежде чем возвращать в свой преобразователь.Это избавит клиента от необходимости проверять, получил ли он строку или массив.