首页 > 解决方案 > Bookshelf.js 与相关的 TypeScript 错误

问题描述

因此,在我的应用程序中,我有相互关联的类别文章。起初我检索所有类别,每个类别中都有文章。问题是我想过滤其中的类别文章userId但我不知道该怎么做,因为我正在使用 TypeScript 并出现错误。

const articlesInCategories = (await (await ArticleCategory.fetchAll())
    .query((qb: QueryBuilder) => {
        qb.innerJoin(Table.ARTICLE_CATEGORY_RELATION, 'article_category_relation.category_id', 'article_category.id' );
        qb.innerJoin(Table.ARTICLE, 'article.id', 'article_category_relation.article_id');

        // Next condition is only for Categories not for Articles inside it
        if (roleId == Role.manager) {
            qb.where('user_id', userId);
        }

        qb.orderBy('id', 'desc');
      })
      .fetch({
          withRelated: [{'articles': function (qb: QueryBuilder) => qb.where('user_id', userId)}]
      }));

userId例如,如果是,1只想获取那些包含用户所写文章的类别id 。此外,并非所有文章,但仅由具有 id 的用户编写。11

我附近有 TS 错误withRelatedType '{ articles: (qb: QueryBuilder) => QueryBuilder<any, any[]>; }' is not assignable to type 'string'.ts(2322)

在这种情况下,您能否帮助我使用 TypeScript 或建议任何替代方法来实现我想要的?

标签: node.jstypescriptormknex.jsbookshelf.js

解决方案


好吧,那是错误的方法。如果我执行以下操作,它会非常有效:

const articlesInCategories = await new ArticleCategory().query((qb: QueryBuilder) => {
    .query((qb: QueryBuilder) => {
        qb.innerJoin(Table.ARTICLE_CATEGORY_RELATION, 'article_category_relation.category_id', 'article_category.id' );
        qb.innerJoin(Table.ARTICLE, 'article.id', 'article_category_relation.article_id');

        if (roleId == Role.manager) {
            qb.where('user_id', userId);
        }

        qb.orderBy('id', 'desc');
      })
      .fetch({
          withRelated: [{ 'articles': (qb: QueryBuilder) => qb.where('user_id', userId) }]
      }));

推荐阅读