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

GraphQL代码优先模式创建复杂类型:NestJS数组字段报错求助

解决NestJS GraphQL中对象数组输入类型的报错问题

问题出在你用了TypeScript的type定义ChainToAddress,而NestJS GraphQL需要带装饰器的类来生成输入类型——TypeScript的类型只是编译时的语法糖,编译后会被移除,无法提供GraphQL所需的运行时元数据,所以才会报'ChainToAddress' only refers to a type, but is being used as a value here.错误。

修正方案如下:

  1. 将ChainToAddress从TypeScript类型改为用@InputType()装饰的类
  2. 给类中的每个字段添加@Field()装饰器
  3. 修正chainAddressess的类型为数组类型ChainToAddress[]

修正后的完整代码:

import { Field, InputType } from '@nestjs/graphql';

@InputType()
export class ChainToAddress {
  @Field()
  chain: string;

  @Field()
  address: string;
}

@InputType()
export class CreateONSInput {
  @Field()
  ons: string;

  @Field(type => [ChainToAddress])
  chainAddressess: ChainToAddress[];
}

解释:

  • @InputType()装饰器告诉NestJS这是一个GraphQL输入类型类,会为其生成对应的GraphQL schema定义
  • 每个字段上的@Field()装饰器会将类属性映射为GraphQL输入字段
  • @Field(type => [ChainToAddress])明确指定该字段是ChainToAddress类型的数组,这里的ChainToAddress是类(运行时存在的值),而非仅编译时的类型

内容的提问来源于stack exchange,提问作者Andon Mitev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:55:14