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

GraphQL字段解析器中Root参数的预期类型是什么?

TypeGraphQL字段解析器中@Root参数的类型选择

在TypeGraphQL里,字段解析器的@Root()参数应该用数据库返回的实际数据类型(也就是你的Event模型定义),原因很直接:

  • 你的events()查询返回的是EventModel.find().lean()的结果,这本质是数据库文档/对象(对应Event类型),而非EventType这个GraphQL schema层面的类型。EventType只是用来定义GraphQL接口的,实际运行时传给字段解析器的root值就是数据库返回的原始数据。
  • 用数据库模型类型能拿到精准的TypeScript类型提示,避免类型不匹配问题——比如root.date是数据库模型里的字段,用Event类型能确保TypeScript识别这个字段,而EventType可能和数据库模型存在字段差异(比如GraphQL类型可能省略某些数据库字段,或者多了计算字段)。

调整后的代码示例:

@Resolver(() => EventType)
export class EventResolver {
  
  @Query(() => EventType)
  async events(): Promise<EventType[]> {
    const events = await EventModel.find().lean();
    return events;
  }

  @FieldResolver(() => Boolean) 
  async isActive(@Root() root: Event): Promise<boolean> {
    // root是数据库返回的Event文档类型,可正常访问date字段
    return datechecker(root.date);
  }
}

需要注意,只要EventType和Event模型的字段在运行时兼容(比如EventType的字段是Event模型字段的子集),TypeScript不会报错,但用数据库模型类型更贴合实际运行逻辑,也更利于后续代码维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:52:02