Me encontré con esta pregunta , pero no creo que quiera usar un alias.
Quiero extender express anyFilesInterceptor para poder trabajar con un objeto de archivo personalizado. No estoy seguro de cómo extender un decorador en NestJS.
Entonces, como solución, probé la composición del decorador de otra pregunta . Sin embargo, recibo un error al intentar crear un decorador muy básico (ejemplo en la documentación)
import { applyDecorators, createParamDecorator, ExecutionContext } from "@nestjs/common"; import { AnyFilesInterceptor } from "@nestjs/platform-express"; export function Test() { return applyDecorators( AnyFilesInterceptor, TestDecorator ) } export const TestDecorator = createParamDecorator( (data: string, ctx: ExecutionContext) => { const request = ctx.switchToHttp().getRequest(); const user = request.user; return data ? user?.[data] : user; }, ); Ahora puedo ver a partir de otras discusiones y la función que nombra que AnyFilesInterceptor es un mixin que devuelve una clase, mientras que TestDecorator creado por createParamDecorator probablemente solo funciona con parámetros.
¿NestJS tiene una forma de crear un decorador de clase? ¿O para ampliar los decoradores existentes?
en realidad AnyFilesInterceptor es una función en sí misma que produce un interceptor (que es cualquier clase que implementa NestInterceptor ).
Puede verlo por el uso: mientras que 'otros' interceptores pueden usarse simplemente dando la clase al decorador UseInterceptor() , este interceptor necesita invocación (sin nueva palabra clave).
Ejemplo:
@UseInterceptor(RegularInterceptor) //or @UseInterceptor(new RegularInterceptor()) // AnyFilesInterceptor is a function returning a class @UseInterceptor(AnyFilesInterceptor()) //or @UseInterceptor(new (AnyFilesInterceptor())({/* some multer options here */)) así que, básicamente, si desea extender AnyFilesInterceptor , simplemente necesita definir un interceptor de clase propio:
export class MyAllFilesInterceptor extends AnyFilesInterceptor() { // YOU MUST OVERRIDE THE `intercept` METHOD! // also, give options to the `AnyFilesInterceptor` method if you wish }