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

GraphQL Schema生成中input/output类型作用及校验失败问题咨询

GraphQL Scalars中[input]/[output]类型的作用及类型校验问题解析

一、[input]和[output]类型的作用

GraphQL标量类型(Scalar)支持在输入和输出场景下定义不同的类型规则,codegen生成的Scalars['XXX']['input']/Scalars['XXX']['output']就是用来明确区分这两种场景的:

  • [input]:对应客户端向服务端发送请求时的参数/变量类型,比如Mutation的入参、Query的筛选条件里的标量字段。
  • [output]:对应服务端返回给客户端的数据类型,比如Query查询结果里的标量字段。
    这种拆分是为了适配部分标量在输入输出时的类型差异——比如服务端返回的ID可能是字符串,但客户端传参时既可以传数字也可以传字符串,通过拆分输入输出类型,能更精准地保证类型安全。

二、类型校验失败的原因

你遇到的报错Argument of type 'number' is not assignable to parameter of type '{ input: any; output: any; }',核心问题是:

  • 代码中错误地在输入场景(比如传参)引用了output类型,或者直接使用了Scalars['Int']这类未明确分支的类型,导致TypeScript将其识别为包含input和output的对象类型,而非你预期的基础类型(比如number)。
  • 当你手动移除[input]/[output]后,TypeScript会将Scalars['XXX']解析为单一的基础类型(比如number/boolean),自然能通过校验,但这也放弃了codegen原本提供的输入输出类型区分的安全保障。

可行的解决方向

如果你的项目中输入输出的标量类型逻辑一致,可以调整codegen的配置文件(比如codegen.yml),直接指定标量对应的TS类型,避免生成嵌套的input/output结构:

scalars:
  Int: number
  Boolean: boolean
  ID: string | number

如果需要保留输入输出类型区分,就要检查代码中类型引用的场景,确保输入场景用[input]分支,输出场景用[output]分支。

内容的提问来源于stack exchange,提问作者Darya Balu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:01:11