여러 개의 데코레이터를 하나로 결합하여 적용하는 데 사용되는 함수이다. NestJS에서 사용되며, 데코레이터들을 하나의 배열로 묶고 해당 배열을 컴포넌트에 적용하는 데에 도움을 준다.
아래와 같이 PropertyDecorator
타입을 주고 정의 할 수 있다.
export function ApiPropertyOptionalNumber(): PropertyDecorator {
return applyDecorators(
ApiProperty({ type: Number }),
ApiPropertyOptional(),
);
}
요청시 (@User() user: User) 와 같이 사용할 custom decorator 를 만들 수 있다.
import { ExecutionContext, createParamDecorator } from "@nestjs/common";
export const User = createParamDecorator(
(_: unknown, context: ExecutionContext) => {
const request = context.switchToHttp().getRequest();
return request.user;
}
);
export const UserId = createParamDecorator(
(_: unknown, context: ExecutionContext) => {
const request = context.switchToHttp().getRequest();
return request.user.userId;
}
);
export const IsUserAdmin = createParamDecorator(
(_: unknown, context: ExecutionContext) => {
const request = context.switchToHttp().getRequest();
return request.isAdmin;
}
);