【问题标题】:How to do a Field Resolver for a Union Type in type-graphql如何在 type-graphql 中为联合类型做一个字段解析器
【发布时间】:2020-08-31 11:54:15
【问题描述】:

考虑以下

栈是 type-graphql / type-orm / postgres

我使用Single Table Inheritance (STI) 和联合类型来表示多种提要类型。

一切正常——直到我想添加Field Resolver——但我找不到让它工作的方法。

您似乎无法将接口类型传递给@Resolver

一些代码片段来说明:

抽象的顶级实体

@InterfaceType()
@Entity({ orderBy: { createdAt: 'DESC' } })
@TableInheritance({ column: { type: 'varchar', name: 'type' } })
export abstract class FeedItem {
  @Field(() => ID)
  @PrimaryGeneratedColumn('uuid')
  id: string

  @Field()
  @Column({ nullable: false })
  type: string

  @Field(() => Customer, { nullable: true })
  @ManyToOne(
    () => Customer,
    customer => customer.feedItems,
    { onDelete: 'CASCADE' }
  )
  customer: Lazy<Customer>

  @Field(() => [FeedItemComment])
  @OneToMany(
    () => FeedItemComment,
    feedItemComment => feedItemComment.feedItem,
    { lazy: true }
  )
  comments: Lazy<FeedItemComment[]>

解析器

export const FeedResultUnion = createUnionType({
  name: 'FeedItemResult', // the name of the GraphQL union
  types: [AuthoredFeedItem, MilestoneFeedItem, TaskFeedItem, AssessmentFeedItem, WeeklySummaryFeedItem], // array of object types classes


@Resolver(() => FeedItem) // <---- this does not work, nor does FeedItemResult
export class FeedItemResolver {

  // would love to do something like the following, but can't ...
  @Authorized()
  @FieldResolver(() => CommentsResponse)
  async comments(@Root() feedItem: FeedItem) {
    const [feedItems, count] = await getRepository(FeedItemComment).findAndCount({
      where: {
        feedItem,
      },
      order: { createdOn: 'DESC' },
    })

    return {
      items: feedItems,
      count,
    }
  }


}


})

谁能给我指出一条通往胜利的道路?!

【问题讨论】:

  • 从 v0.18.0-beta.14 版本开始应支持接口解析器。见here。工会的解析器不会是因为工会不定义字段。从技术上讲,GraphQL 中不存在接口字段的解析器,但是像 type-graphqlgraphql-tools 这样的库将解析器复制到每个实现类型的解析器中。你用的是什么版本?
  • 另外,描述什么是“不工作”也会很有帮助。你看到了什么错误,如果有的话?预期的行为是什么,您实际看到的行为是什么?

标签: typescript graphql typeorm typegraphql


【解决方案1】:

我也遇到了@FieldResolver() 的问题我刚刚在tsconfig.json 中进行了更改,我将"target": "es5" 更改为"target": "es6"

type-graphql documentation 表示您必须配置 tsconfig.json 才能使其工作

希望对你有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 2018-06-16
    • 2021-08-23
    • 2019-12-14
    • 2020-05-06
    • 2017-05-28
    • 2019-07-01
    • 2021-04-19
    相关资源
    最近更新 更多