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

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 roomType does 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:57:47