Я использую плагин typescript-mongodb
для graphql-codegen
для генерации типов Typescript для извлечения данных из MongoDB и вывода их через GraphQL на узле.
Моя входная схема GraphQL выглядит следующим образом
type User @entity{
id: ID @id,
firstName: String @column @map(path: "first_name"),
...
Сгенерированные выходные типы Typescript выглядят корректно
export type User = {
__typename?: 'User',
id?: Maybe<Scalars['ID']>,
firstName?: Maybe<Scalars['String']>,
...
И соответствующий объект БД
export type UserDbObject = {
_id?: Maybe<String>,
first_name: Maybe<string>,
...
Проблема заключается в том, что фактически отправляется обратно документ mon go как UserDbObject
Я не получаю сопоставленные поля в выводе. Я мог бы написать собственный распознаватель, который переназначает поля обратно в тип User
, но это будет означать, что я сопоставляю поля в двух разных местах.
т.е. я не получаю сопоставленные поля из распознаватель, подобный этому
userById: async(_root: any, args: QueryUserByIdArgs, _context: any) : Promise<UserDbObject> => {
const result = await connectDb().then((db) => {
return db.collection<UserDbObject>('users').findOne({'_id': args.id}).then((doc) => {
return doc;
});
})
...
return result as UserDbObject;
}
};
Есть ли способ использовать плагин typescript-mongodb
, чтобы отображать только эти поля в схеме, а затем использовать автоматически сгенерированный код для их разрешения?