📜  如何在nestjs graphql中为输入数组提供args类型 - Javascript(1)

📅  最后修改于: 2023-12-03 14:52:47.392000             🧑  作者: Mango

如何在NestJS GraphQL中为输入数组提供args类型

在NestJS GraphQL中,我们可以使用GraphQL模块提供的@Args装饰器来为查询或突变指定参数。但是,当我们需要向查询或突变传递一个数组作为参数时,该如何定义它的类型呢?本文将为您介绍如何在NestJS GraphQL中为输入数组提供args类型。

在NestJS GraphQL中定义输入数组类型

首先,让我们定义一个查询或者突变,传递一个数组作为参数:

@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中使用输入数组类型

一旦我们在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装饰器,我们可以保证查询和突变的参数类型正确。此外,遵循最佳实践可以帮助我们更好地组织我们的代码,并减少未知的错误。

希望本文对您有所帮助!