📜  typegraphql 装饰器 (1)

📅  最后修改于: 2023-12-03 15:05:39.073000             🧑  作者: Mango

TypeGraphQL 装饰器

TypeGraphQL是一个用于构建GraphQL API的现代型、有类型的schema-first库。其中有很多类型的装饰器可以帮助我们更方便地定义GraphQL模式。

@ObjectType

@ObjectType装饰器用于定义一个GraphQL类型,它会从一个 TypeScript 类自动推断出携带有所有属性的schema。

这是一个类的例子:

@ObjectType()
class User {
  @Field()
  id: string;

  @Field()
  name: string;
}

这个类定义了一个GraphQL类型User,它包含了idname两个属性。@Field()装饰器标识了将它们添加到GraphQL schema中。

@Field

@Field装饰器用于将特定属性添加到GraphQL schema中,包括数据类型、非必填选项、变量名称等。如果属性是一个类,TypeGraphQL可以自动推断出将它们包含在GraphQL模式中所需的所有字段。

@ObjectType()
class User {
  @Field()
  id: string;

  @Field()
  name: string;

  @Field(() => [Post])
  posts: Post[];
}

这个例子添加了一个posts属性。@Field(() => [Post])装饰器指定这个属性是一个Post类型的数组。

@Args

@Args装饰器用于为GraphQL查询和突变添加变量。被标记的函数参数将自动添加到GraphQL schema中。

@Resolver(User)
class UserResolver {
  @Query(() => [User])
  async users(
    @Args({ name: 'name', nullable: true }) name?: string,
    @Args({ name: 'minAge', type: () => Int, nullable: true }) minAge?: number,
  ): Promise<User[]> {
    // ...
  }
}

这个例子定义了名为users的查询,使用了@Args装饰器标注了两个可选变量——nameminAge。这些变量和它们的类型、名称和是否可空等信息都被添加到了GraphQL schema中。

@Resolver

@Resolver装饰器用于定义与GraphQL查询和突变相关的函数。

@Resolver(User)
class UserResolver {
  @Query(() => [User])
  async users(): Promise<User[]> {
    // ...
  }
}

这个例子添加了一个名为users的查询,同时我们通过@Resolver(User)标识出这个Resolver与User类型相关联。

总结

这里介绍了一些TypeGraphQL中常用的装饰器。这些装饰器可以让我们更方便地定义GraphQL模式,同时也大大减轻了库的开发负担。希望这个介绍能够帮助你更快地上手TypeGraphQL!