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

@graphql-codegen生成的Exact<T>类型作用是什么?对查询变量有何影响?

Exact<T> 类型的作用

这个类型是 GraphQL Code Generator 专门针对 TypeScript 原生类型的兼容特性实现的,核心作用就是把对象类型从「开放兼容」改成「严格封闭」,禁止对象携带任何没有在类型里显式声明的额外属性。

TypeScript 原生的对象类型默认是结构兼容的:只要你传入的对象满足类型要求的必填属性、类型匹配,哪怕多带了N个额外属性,只要不是直接给变量字面量赋值,TS 都不会报错。比如下面的代码原生情况下是完全合法的:

// 不用 Exact 时的 FooQueryVariables 定义
type FooQueryVariables = { id: string }

const myVars = { id: 'user_123', wrongKey: '我是多余的属性' }
function sendQuery(vars: FooQueryVariables) {}
sendQuery(myVars) // TS 不会报任何错误

对 FooQueryVariables 的影响

和不使用Exact<T>的情况相比,加了包裹后的FooQueryVariables会有两个明确的约束:

  • 必须携带声明的id字段,且字段类型必须是字符串,这一点和原生情况一致
  • 不能携带任何未声明的额外字段,比如上面例子里的wrongKey,或者拼写错误的idd这类字段,都会直接触发TS类型报错,在开发阶段就能提前发现问题。

这个设计可以避免多余的变量被带到GraphQL请求里,减少不必要的传输开销,也能提前拦截变量名拼写错误这类低级问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:39:03