graphql-request在Mutation传枚举字符串报错,如何让其识别为枚举?
解决graphql-request传递枚举类型参数的类型不匹配问题
问题场景
我使用graphql-codegen + graphql-request进行数据变更操作,相关代码及类型定义如下:
定义的Mutation
export const updateRoomQuery = graphql(/* GraphQL */ ` mutation UpdateRoomInOffice($cmd: UpdateRoomInOfficeInput!) { updateRoomInOffice(cmd: $cmd) { roomId roomType } } `);
GraphQL类型定义
enum RoomType { CHECKIN CHECKOUT DOCSOFFICE EXAM OTHER } input UpdateRoomInOfficeInput { roomId: UUID! roomType: RoomType! }
调用代码
GQLClient.request(updateRoomQuery, { cmd: { roomType: "EXAM", roomId: '123' } });
执行后收到错误提示:
The specified value type of field
roomTypedoes not match the field type.
已知问题出在引号上,但不清楚如何让graphql-request将roomType识别为枚举类型。
解决方案
1. 使用graphql-codegen生成的枚举常量
这是最可靠的方式,graphql-codegen会根据你的GraphQL schema生成对应的枚举类型,直接导入使用即可:
// 导入生成的枚举(路径根据你的项目结构调整) import { RoomType } from './generated/graphql'; // 调用时直接传递枚举值,无需加引号 GQLClient.request(updateRoomQuery, { cmd: { roomType: RoomType.EXAM, roomId: '123' } });
生成的枚举会被graphql-request正确序列化,自动匹配GraphQL端的枚举类型,避免类型不匹配错误。
2. 确保graphql-codegen配置正确生成枚举
如果还没生成枚举类型,检查你的codegen.yml配置,确保启用了必要的插件来生成枚举:
generates: ./generated/graphql.ts: plugins: - typescript - typescript-operations - typescript-graphql-request
这些插件会自动将GraphQL中的枚举转换为客户端可用的枚举常量。
内容的提问来源于stack exchange,提问作者Spadar Shut
相关产品推荐
相关产品推荐

