Nestjs — Используйте applyDecorators внутри createParamDecorator

#nestjs

Вопрос:

Я использую декораторы Nestjs и пытаюсь максимально использовать пользовательские декораторы. Я пытаюсь написать свой собственный декоратор @Body param, который проверяет и применяет несколько декораторов одновременно.

Кто-нибудь знает, возможно ли нижеприведенное? У меня возникли трудности с получением второго аргумента в вызове преобразования каналов metadata: ArgumentMetadata .

 export const MyParamDecorator = <T>(myDto: T) => {
  return createParamDecorator(
    (data: unknown, ctx: ExecutionContext) => {
      applyDecorators( // also get SetMeta and Pipes to validate DTO
        SetMetadata('thisWorks', true)
        UsePipes(CustomValidationPipe, OtherPipe), //   add MyDTO - type T somehow..
      );
      return doAsyncWork()
    },
  )();
}

@Controller('users')
export class UsersController {
  @Patch(':id')
  update(@MyParamDecorator() asyncWork: Promise<any>) { // <------ Promise<any> is custom async opperation that will be handled. (So I can't type the DTO here..)
    return reqBody;
  }
}
 

Комментарии:

1. Я думаю, что меня смущает подход здесь, потому @Body() что он является декоратором параметров, но @SetMetadata() и @UsePipes() является классовым или классовым методом декораторов, и вы пытаетесь применить их к параметру. Не могли бы вы немного уточнить прецедент использования? Мне интересно, есть ли здесь лучший подход

2. Было бы разумнее иметь MyParamDecorator внутри applyDecorators , а не наоборот