如何让apollo client:codegen忽略@rest指令解决查询字段报错
解决方案
该报错是因为apollo client:codegen默认会对照服务端GraphQL schema校验所有查询字段,@rest指令声明的是仅客户端存在的查询字段,不在服务端schema定义中,因此触发字段不存在的校验错误。
方法1:搭配@client指令跳过服务端校验
你可以在@rest指令旁边加上@client指令,标记该字段为客户端专属字段,codegen会自动跳过对该字段的服务端schema校验:
export const wompiAcceptanceTokenQuery = gql` query WompiAcceptanceToken { acceptanceToken @rest( type: "WompiAcceptanceToken" path: "some/api/endpoint" ) @client { data } } `
不需要修改codegen脚本,改完查询语句重新执行生成命令即可。
方法2:指定客户端schema补充字段定义
如果不想给每个@rest查询加@client,你可以单独创建一个客户端schema文件,补充所有@rest相关的字段定义:
- 新建
client-schema.graphql文件,内容示例如下:
extend type Query { acceptanceToken: WompiAcceptanceToken } type WompiAcceptanceToken { data: String # 按接口实际返回字段调整类型 }
- 修改你的npm脚本,添加
--clientSchema参数指定该文件:
"typegenerate": "apollo client:codegen --target=typescript types --globalTypesFile=src/types/globalTypes.ts --clientSchema ./client-schema.graphql && rm -rf types",
方法3:排除包含@rest查询的文件
如果不需要给这类@rest查询生成TS类型,可以通过--exclude参数排除对应文件,示例如下:
"typegenerate": "apollo client:codegen --target=typescript types --globalTypesFile=src/types/globalTypes.ts --exclude 'src/**/*rest-query*.ts' && rm -rf types",
把路径替换为你实际存放@rest查询的文件路径即可。
内容的提问来源于stack exchange,提问作者Cristian Flórez
相关产品推荐
相关产品推荐

