You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL报错CannotDetermineGraphQLTypeError:无法识别subStatus输入类型

解决CannotDetermineGraphQLTypeError: 无法识别subStatus的GraphQL输入类型

问题原因

你在UpdateEnrollmentInput(输入类型)里用了ObjectType作为subStatus的字段类型,这是错误的。ObjectType是GraphQL的输出类型,仅用于定义返回给客户端的对象结构,不能作为输入类型的字段类型使用,因此GraphQL无法识别该类型,抛出报错。

解决方案

根据subStatus的实际使用场景,选择以下两种方案之一:


方案1:subStatus是任意结构的JSON对象(动态无固定结构)

使用GraphQL的JSON标量类型接收任意JSON对象:

  1. 安装必要依赖(基于NestJS场景):
npm install graphql-scalars
  1. 修改UpdateEnrollmentInput代码:
import { InputType, Field } from '@nestjs/graphql';
import { GraphQLJSON } from 'graphql-scalars';

@InputType()
export class UpdateEnrollmentInput {
  // 其他字段保持不变...

  @Field(() => GraphQLJSON, { nullable: true })
  subStatus: Record<string, any>; // 用Record<string, any>或unknown表示任意对象结构
}

方案2:subStatus有固定结构

如果subStatus的字段是固定的,定义对应的InputType类:

  1. 创建SubStatusInput类:
import { InputType, Field } from '@nestjs/graphql';

@InputType()
export class SubStatusInput {
  @Field({ nullable: true })
  code?: string;

  @Field({ nullable: true })
  message?: string;

  // 添加subStatus需要的其他字段
}
  1. 在UpdateEnrollmentInput中使用该类型:
import { InputType, Field } from '@nestjs/graphql';
import { SubStatusInput } from './sub-status.input'; // 导入上述类

@InputType()
export class UpdateEnrollmentInput {
  // 其他字段保持不变...

  @Field(() => SubStatusInput, { nullable: true })
  subStatus?: SubStatusInput;
}

关键注意点

  • 输入类型(@InputType()装饰的类)的字段只能使用输入类型或GraphQL标量类型(String、Int、Boolean、JSON等),绝对不能使用输出类型(@ObjectType()装饰的类)。
  • 若必须使用无固定结构的动态对象,JSON标量是最直接的解决方案。

内容的提问来源于stack exchange,提问作者Satish Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:50:21