📅  最后修改于: 2023-12-03 15:05:39.073000             🧑  作者: Mango
TypeGraphQL是一个用于构建GraphQL API的现代型、有类型的schema-first库。其中有很多类型的装饰器可以帮助我们更方便地定义GraphQL模式。
@ObjectType
装饰器用于定义一个GraphQL类型,它会从一个 TypeScript 类自动推断出携带有所有属性的schema。
这是一个类的例子:
@ObjectType()
class User {
@Field()
id: string;
@Field()
name: string;
}
这个类定义了一个GraphQL类型User
,它包含了id
和name
两个属性。@Field()
装饰器标识了将它们添加到GraphQL schema中。
@Field
装饰器用于将特定属性添加到GraphQL schema中,包括数据类型、非必填选项、变量名称等。如果属性是一个类,TypeGraphQL可以自动推断出将它们包含在GraphQL模式中所需的所有字段。
@ObjectType()
class User {
@Field()
id: string;
@Field()
name: string;
@Field(() => [Post])
posts: Post[];
}
这个例子添加了一个posts
属性。@Field(() => [Post])
装饰器指定这个属性是一个Post类型的数组。
@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
装饰器标注了两个可选变量——name
和minAge
。这些变量和它们的类型、名称和是否可空等信息都被添加到了GraphQL schema中。
@Resolver
装饰器用于定义与GraphQL查询和突变相关的函数。
@Resolver(User)
class UserResolver {
@Query(() => [User])
async users(): Promise<User[]> {
// ...
}
}
这个例子添加了一个名为users
的查询,同时我们通过@Resolver(User)
标识出这个Resolver与User
类型相关联。
这里介绍了一些TypeGraphQL中常用的装饰器。这些装饰器可以让我们更方便地定义GraphQL模式,同时也大大减轻了库的开发负担。希望这个介绍能够帮助你更快地上手TypeGraphQL!