Bookshelf.js Связанная с ошибкой машинописного текста

#node.js #typescript #orm #knex.js #bookshelf.js

#node.js #typescript #orm #knex.js #bookshelf.js

Вопрос:

Итак, в моем приложении у меня есть категории и статьи, которые взаимосвязаны. Сначала я извлекаю все категории, и внутри каждой из них есть статьи. Проблема в том, что я хочу фильтровать как категории, так и статьи внутри него, 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 , хотите получить только те категории, которые содержат статьи, написанные пользователем с идентификатором 1 . БОЛЕЕ того, не все статьи, а ТОЛЬКО написанные пользователем с id 1 .

У меня ошибка TS рядом withRelated : Type '{ articles: (qb: QueryBuilder) => QueryBuilder<any, any[]>; }' is not assignable to type 'string'.ts(2322)

Можете ли вы помочь мне, пожалуйста, с TypeScript в таком случае или предложить какие-либо альтернативные способы достижения того, чего я хочу?

Ответ №1:

Ну, это был неправильный подход. Если я сделаю следующее, это сработает блестяще:

 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) }]
      }));