3

我正在使用 Type-GraphQl(它是一个 Typescript 库,可让您使用 Typescript 类自动生成 GraphQL 模式和解析器)和 Typegoose(它对 Mongoose 查询执行相同的操作)。我正在尝试减少定义我的数据的文件数量,理想情况下,我对 GQL 和 MongoDB 中的数据只有一个真实来源。

可以将这两个库组合起来,以便我使用单个 Typescript 类在一个文件中描述的 GQL 模式和 Mongoose 类型吗?

例如,一个简单的 type-graphql 文件(定义“书”类型)如下所示:

import { Field, ObjectType } from "type-graphql";
import { InStock } from "./gql/shared/types";

@ObjectType()
export class Book extends InStock {
  @Field()
  title: string;

  @Field()
  publicationDate: Date;

  @Field()
  author: string;

  @Field()
  pages: number;
}

该类typegoose看起来非常相似,但使用@prop装饰器来设置模式的属性:

import * as mongoose from "mongoose";
import { getModelForClass, prop } from "@typegoose/typegoose";
import { InStock } from "./mongoose/shared/types";

class BookClass extends InStock {
  @prop()
  public title: string;
  @prop()
  public author: string;
  @prop()
  public publicationDate: Date;
  @prop()
  public pages: number;
  @prop()
}

export const Book = getModelForClass(BookClass);

是否可以将这两种类型与同一个文件中的两种装饰器结合起来,还是会破坏typegoose/ type-graphl?像这样:

import * as mongoose from "mongoose";
import { Field, ObjectType } from "type-graphql";
import { InStock } from "./shared";
import { getModelForClass, prop } from "@typegoose/typegoose";

export class Book extends InStock { // Export type-graphql here...
  @prop()
  @Field()
  public title: string;
  @prop()
  @Field()
  public author: string;
  @prop()
  @Field({ nullable: true })
  public publicationDate?: Date;
  @prop()
  @Field()
  public pages: number;
}

export const Book = getModelForClass(BookClass); /// Export typegoose here...
4

1 回答 1

6

我见过很多用户一起成功使用 typegoose 和 typegraphql

@ObjectType()
export class Book extends InStock {
  @prop()
  @Field()
  public title: string;

  @prop()
  @Field()
  public author: string;

  @prop()
  @Field({ nullable: true })
  public publicationDate?: Date;

  @prop()
  @Field()
  public pages: number;
}

export const Book = getModelForClass(BookClass);

这里有一些来自 TypeGraphQL 的官方示例

于 2020-08-26T06:48:12.193 回答