📚

リゾルバでオブジェクトの引数を受け取る(NestJS, GraphQL)

2023/11/24に公開

引数をオブジェクトにしたい場合は@InputTypeデコレータでクラスを定義する必要があるようです。

コード

import { Args, Field, InputType, Int, Query, Resolver } from '@nestjs/graphql'

@InputType()
class Person {
  @Field(() => Int)
  age: number

  @Field()
  name: string
}

@Resolver()
class SampleResolver {
  @Query(() => String)
  sample(
    @Args('person', {
      type: () => Person,
    })
    person: Person,
  ): string {
    return `${person.name}(${person.age})さん、こんにちは`
  }
}

リクエスト

query {
	sample(person: {
		name: "サンプル太郎"
		age: 20
	})
}

レスポンス

{
	"data": {
		"sample": "サンプル太郎(20)さん、こんにちは"
	}
}

詰まったところ

引数のクラスを@ArgsType@ObjectType等で定義しようとしてエラーになっていました。

参考

https://docs.nestjs.com/graphql/mapped-types

Discussion