如何在type-graphql中为联合类型执行字段解析器

时间:2020-05-14 19:35:20

标签: typescript graphql typeorm typegraphql

请考虑以下内容

堆栈是type-graphql / type-orm / postgres

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

在我想添加一个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,
    }
  }


}


})

任何人都可以指出我的胜利之路吗?!

1 个答案:

答案 0 :(得分:2)

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

type-graphql documentation说,您必须配置tsconfig.json才能使其正常工作

我希望我能帮上忙