TypeGraphQL集成graphql-upload时InputType的file字段需显式指定类型报错如何解决
解决方案
这个报错的根本原因是TypeGraphQL的运行时反射系统无法从编译期的TypeScript类型FileUpload推断出对应的GraphQL标量类型,同时你的解析器参数类型声明也存在错误,按以下两步修改即可:
1. 修正InputType定义
给@Field装饰器显式传入运行时对应的GraphQL上传标量类型GraphQLUpload:
import { FileUpload, GraphQLUpload } from 'graphql-upload' ... @InputType({ description: 'Upload data input' }) export class InputType { @Field(() => GraphQLUpload, { nullable: true, description: 'File upload', }) @Joiful.any() file: FileUpload }
2. 修正Mutation解析器的参数类型声明
你之前给data参数错误指定了GraphQLUpload类型,实际上data是你自定义的InputType类型,修改如下:
import { ReturnType, InputType } from '@pkg/schemas' import { Context } from '@pkg/types' ... @Mutation(() => ReturnType) uploadFileAndData( @Ctx() ctx: Context, @Arg('data', () => InputType, { description: 'File Upload' }) data: InputType, ): Promise<ReturnType> { return functionWithMagic({ ctx, data }) }
额外注意事项
- 确保你已经在GraphQL服务层正确注册了
graphql-upload对应的上传解析中间件 - 如果你的TypeGraphQL版本低于1.0,需要额外将
GraphQLUpload注册为自定义标量后再使用
内容的提问来源于stack exchange,提问作者Antoni
相关产品推荐
相关产品推荐

