📅  最后修改于: 2023-12-03 14:52:47.392000             🧑  作者: Mango
在NestJS GraphQL中,我们可以使用GraphQL模块提供的@Args
装饰器来为查询或突变指定参数。但是,当我们需要向查询或突变传递一个数组作为参数时,该如何定义它的类型呢?本文将为您介绍如何在NestJS GraphQL中为输入数组提供args类型。
首先,让我们定义一个查询或者突变,传递一个数组作为参数:
@Query(() => [MyType])
async myTypeQuery(
@Args('myArray') myArray: number[],
): Promise<MyType[]> {
// ...
}
上述代码中,我们在查询函数签名中加入了一个名为myArray
的参数,它的类型为number[]
,也就是一个数字类型的数组。
接下来,我们可以使用ArgsType
装饰器来为输入数组定义一个类型:
@ArgsType()
class MyArrayArgs {
@Field(() => [Int])
myArray: number[];
}
上述代码中,我们定义了一个名为MyArrayArgs
的类型,并在该类型上使用@ArgsType
装饰器。在该类型中,我们为myArray
添加了一个字段,并使用@Field
装饰器指定它的类型为数字类型的数组[Int]
。
接下来,我们在查询函数中使用@Args
装饰器来引用该类型:
@Query(() => [MyType])
async myTypeQuery(
@Args() myArrayArgs: MyArrayArgs,
): Promise<MyType[]> {
const { myArray } = myArrayArgs;
// ...
}
上述代码中,我们将@Args
装饰器的参数指定为MyArrayArgs
,也就是我们刚刚定义的类型。这样,我们就能够在查询中使用输入数组类型了。
一旦我们在NestJS GraphQL中定义了输入数组类型,我们就可以在查询和突变中使用它。下面是一个完整的示例:
import { Args, ArgsType, Field, Int, Query, Resolver } from '@nestjs/graphql';
@ArgsType()
class MyArrayArgs {
@Field(() => [Int])
myArray: number[];
}
@Resolver()
class MyResolver {
@Query(() => [MyType])
async myTypeQuery(
@Args() myArrayArgs: MyArrayArgs,
): Promise<MyType[]> {
const { myArray } = myArrayArgs;
// ...
}
@Mutation(() => MyType)
async myTypeMutation(
@Args() myArrayArgs: MyArrayArgs,
@Args('otherArg') otherArg: string,
): Promise<MyType> {
const { myArray } = myArrayArgs;
// ...
}
}
上述代码中,我们定义了一个名为MyResolver
的解析器,并在其中定义了一个查询和一个突变。我们同时也定义了输入数组类型MyArrayArgs
,并将它引用到查询和突变中。
最后,我们强烈建议您在使用输入数组类型时遵循以下最佳实践:
@Args
装饰器的参数指定为输入数组类型。any
类型,并尽可能地使用更精确的类型。在NestJS GraphQL中为输入数组提供args类型可以让我们更轻松地管理和使用数组类型的参数。通过定义明确定义的输入数组类型,并将它们传递给@Args
装饰器,我们可以保证查询和突变的参数类型正确。此外,遵循最佳实践可以帮助我们更好地组织我们的代码,并减少未知的错误。
希望本文对您有所帮助!