애초에 데코레이터라는 언어 기능을 중심으로 구축
ES2016 데코레이터는 함수(타겟, 이름, 속성 기술자)를 인수로 받아서 반환하는 표현식입니다. 데코레이터 앞에 @ 문자를 붙이고 데코레이터할 대상의 맨 위에 배치하여 적용합니다. 데코레이터는 클래스, 메서드 또는 속성에 대해 정의될 수 있습니다.
이러한 기본 구조:
export const Test = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
const user = request.user;
return data ? user?.[data] : user;
},
);
데코레이터에 값을 넘겨주면서 실제 data 에 접근한 로직 구현 가능
커스텀 파라미터 decorator 도 내장된 decorator 와 동일하게 취급
@Get()
async findOne(
// 해당 옵션 필수
@User(new ValidationPipe({ validateCustomDecorators: true }))
user: UserEntity,
) {
console.log(user);
}
데코레이터들끼리 조합도 가능