Гнездо js Сначала схема GraphQL - как добавить преобразователи свойств для типа объединения? - PullRequest
0 голосов
/ 20 января 2020

Мне нужна помощь здесь, я не могу заставить это работать.

Я использую Nest Js с GraphQL - сначала схема.

У меня есть следующая схема:

type Small {
    id: Int
    name: String
    color: String
}

type Big {
    id: Int
    name: String
    size: Int
}

type Huge {
    id: Int
    name: String
    engine: Int
}

type Cars {
    id: Int
    name: String
    type: Types
}

union Types = Small | Big | Huge

type Query {
    car(id: ID!): Cars
}

Подскажите, пожалуйста, как создать преобразователи для поля type типа Типы ?

1 Ответ

1 голос
/ 11 февраля 2020

Я понял это в конце. Проблема заключалась в добавлении функции разрешения типа для определения типа объекта, который должен быть возвращен. После нескольких проигранных / выигранных сражений я обнаружил, что вам нужно создать отдельный преобразователь для класса типа объединения и один в другом преобразователе для поля с типом объединения. Итак, учитывая мой пример выше, мне нужно было: 1. Создать распознаватель для типа Types:

@Resolver('Types')
export class TypesResolver {
    @ResolveProperty()
    __resolveType(obj) {
        if (obj instanceof Small) {
            return 'Small';
        }
        if (obj instanceof Big) {
            return 'Big';
        }
        return null;
    }
}
Разрешите свойство, используемое в распознавателе Cars с типом Types, и верните требуемый объект:
@ResolveProperty('type')
__resolveType(obj): any {
    if (obj.color) {
        return this.smallService.getByColor(obj.color);
    }
    if (obj.size) {
        return this.bigService.getBySize(obj.size);
    }
    return null;
}
...