Подтвердить что ты не робот

Объединение GraphQL и конфликтующие типы

У меня проблема с моим проектом, и я не могу найти никакого решения в Интернете. Здесь ситуация.

  • У меня есть Союз (DataResult) 2 типов (Teaser и Program)
  • У меня есть тип Zone с полем data (массив DataResult)
  • Teaser & Program имеют одно и то же поле title с другим типом (String и String!)

Вот части схем Zone, Teaser и Program:

type Program {
    title: String
}

type Teaser {
    title: String!
}

union DataResult = Teaser | Program

type Zone {
    (...)
    data: [DataResult!]
}

Когда я попытался запросить данные зоны, как описано в приведенной ниже части запроса, у меня возникла ошибка в GraphQL.

zones {
    ...zoneFieldsWithoutData
    data {
        ... on Program {
            ...programFields
        }
        ... on Teaser {
            ...teaserFields
        }
    }
}

Вот ошибка:

Error: GraphQL error: Fields \"title\" conflict because they return conflicting types String and String!. Use different aliases on the fields to fetch both if this was intentional

Я не могу использовать псевдоним, потому что спецификациям нужно одинаковое имя атрибута для всех объектов "DataResult". Что я могу сделать?

Более того, даже если я установлю тот же тип для title, я получу много предупреждений о "пропущенных полях" в консоли....

PS: я использую Vanilla Apollo в качестве клиента GraphQL (на стороне сервера)

4b9b3361

Ответ 2

Использование интерфейса решило эту проблему для меня, включая "отсутствующее поле" - ошибки (хотя это означает, что поля должны быть одного типа, я думаю).

Что-то вроде

interface DataResult {
    title: String!
}

type Program implements DataResult {
    // Not sure if this can be empty?
}

type Teaser implements DataResult {
    // Not sure if this can be empty?
}

type Zone {
    (...)
    data: [DataResult!]
}