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

GraphQL Codegen如何仅将Resolver返回类型设为Partial并保留参数必选

解决方案

你需要使用 @graphql-codegen/typescript-resolvers 提供的 defaultReturnTypeMapper 配置项,该配置专门用于修改Resolver的返回类型,完全不会影响父参数parent的类型约束。

具体配置修改

将你之前添加的defaultMapper配置删除,替换为defaultReturnTypeMapper即可,完整配置如下:

overwrite: true
schema: "src/**/*.(resolver|type).ts"
documents: null
generates:
  src/graphql/generated/graphql.ts:
    plugins:
      - "typescript"
      - "typescript-resolvers"
    config:
      typesSuffix: GQL
      resolverTypeSuffix: Resolver
      # 仅修改Resolver返回类型为Partial,不影响入参类型
      defaultReturnTypeMapper: Partial<{T}>

配置效果

  1. 所有Resolver的返回值会自动被包裹为Partial<对应GQL类型>,你不需要再写as any之类的强制类型转换,直接返回缺少待委托解析字段的对象即可正常通过类型校验
  2. Resolver的入参parent依旧保持完整的必选类型约束,不需要额外添加类型断言

注意事项

如果你的@graphql-codegen/typescript-resolvers版本低于v2.7.0,需要先升级到最新稳定版才能支持该配置项。如果暂时无法升级,可以手动定义通用返回类型包裹每个Resolver的返回值,示例如下:

type ResolverRet<T> = Partial<T> | Promise<Partial<T>>
// 使用时
export const CountryResolver: CountryResolverGQL<GQLContext> = {
  async regions(parent, _args, { dataSources }): ResolverRet<RegionGQL[]> {
    const regions = await dataSources.placesService.getRegionsFromCountryId(parent.id!)
    return regions.map((region) => ({ ...region, country: parent }))
  }
}

内容的提问来源于stack exchange,提问作者Some random IT boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:02