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.错误。
修正方案如下:
- 将
ChainToAddress从TypeScript类型改为用@InputType()装饰的类 - 给类中的每个字段添加
@Field()装饰器 - 修正
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
相关产品推荐
相关产品推荐

