微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sequelize,Typescript和GraphQL:解析器的第一个参数类型

如何解决Sequelize,Typescript和GraphQL:解析器的第一个参数类型

我在使用Sequelize和Typescript开发GraphQL Api服务器时有些卡住。 我的问题与打字和概念问题有关。我已经根据数据库表及其关系定义了Sequelize模型。 我在GraphQL解析器中使用这些模型,例如:

Query: {
    part: (_,{ id },{ models }) => models.Part.findByPk(id),parts: (_,__,{ models }) => models.Part.findAll(),},Part: {
    subparts: async (parent,_,{ models }) => {
      const parentPart = await models.Part.findByPk(parent.id,{ include: { model: models.Part,as: 'children' } });
      if (parentPart) {
        return parentPart.getChildren();
      }
      return [];
}

我的疑问与字段subparts解析器的第一个参数的类型有关。根据我通过graphQL code generator parent生成的解析器类型,应该具有我在模式中定义的相同类型,但这不是正确的,它具有模型类型,因为模型实例是父解析器返回。

更新:我在此附上我的codegen.yml,并发表了非常有价值的评论。 我为Part类型定义了一个映射器,这就是我应该为parent解析器参数的类型。

schema: ./src/**/*.typedefs.ts
generates: 
    ./src/types/graphql.generated.ts:
        plugins:
            - typescript
            - typescript-resolvers
        config:
            noSchemaStitching: true
            useIndexSignature: true
            contextType: ../context#MyContext
            mappers:
                Part: ../part/part.types#IPart
                MacroProduct: ../macro-product/macroProduct.types#IMacroProduct

这是我用作Part映射器的类型:

export interface IPart {
  id: number;
  name: string;
  thumb?: string;
  subparts?: [IPart];
  parentId?: number;
}

我以为它应该是parent arg的类型,但是我在查询解析器中使用了Sequelize提供的find方法,所以也许这也会影响parent类型

我理解和/或做错了什么?

非常感谢所有愿意花时间帮助我的人。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。