Проверка аргументов, переданных в общую мутацию в базовом распознавателе

Текущее поведение

  • У меня есть базовый класс и несколько производных классов
  • Есть BaseResolver, который наследуется резолверами производных классов.
  • Внутри BaseResolver есть мутация create
  • Эта мутация создания принимает разные аргументы в зависимости от производного класса.
  • Существует create DTO для базового класса, create DTO производных классов, наследуемых от этого класса.
  • Я передаю класс create DTO производного класса в BaseResolver, наследуя его в производных распознавателях.

Базовый резольвер:

      export function BaseResolver<
  T extends Type<BaseClass>,
  createClassDto extends Type<CreateBaseClassDto>,
>(classRef: T, createClassArgsDtoRef: createClassDto): any

Производный резольвер:

      @Resolver((of) => DerivedXClass)
export class DerivedXResolver extends BaseResolver(
  DerivedXClass,
  CreateDerivedXDto,
) 
  • Я указываю тип аргументов следующим образом:
       async createMutation(
      @Args({ type: () => createClassArgsDtoRef })
      args: Type<CreateBaseClassDto>,
    )
  • Аргументы вообще не подтверждаются

Минимальный код воспроизведения

У него есть шаги для воспроизведения и ожидаемое поведение.

https://github.com/snigdha920/nestjs-validation-args

1 ответ

Я уверен, что, вероятно, есть более чистый способ сделать это, но что-то хакерское будет выглядеть так:

          @Mutation(() => Boolean, { name: `create${classRef.name}` })
    async createMutation(
      @Args({ type: () => createClassArgsDtoRef })
      args: // @ts-ignore
      createClassArgsDtoRef,
    ) {
      console.log('class is ', classRef.name);
      console.log('args captured are ', args);
      return true;
    }
  }

Typescript по сути не понимает, что то, что вы передаете здесь, на самом деле является ссылкой на класс, и его следует использовать как тип. Вероятно, есть лучший способ установить это, может быть, даже использовать декоратор настраиваемых параметров, но пока это работает и, насколько мне известно, удовлетворяет общему использованию типов.

Другие вопросы по тегам