반응형
매개변수 데코레이터
- 생성자 또는 메서드의 매개변수에 선언되어 적용
- 선언파일 선언클래스에서는 사용될 수 없다
- 반환값 무시
호출시 3개의 인수와 함께 호출됨
- 정적멤버가 속한 클래스의 생성자 함수이거나 인스턴스멤버에 대한 클래스의 프로토타입
- 멤버의 이름
- 매개변수가 함수에서 몇 번째 위치에 선언되었는지를 나타내는 인덱스
구현
import { BadRequestException } from '@nestjs/common';
export class ParameterDecorationTest {
private name: string;
@Validate
setName(@MinLength(3) name: string) {
this.name = name;
}
}
function MinLength(min: number) {
return function (target: any, propertyKey: string, parameterIndex: number) {
target.validators = {
minLength: function (args: string[]) {
return args[parameterIndex].length >= min;
},
};
};
}
function Validate(
target: any,
propertyKey: string,
descriptor: PropertyDescriptor
) {
const method = descriptor.value;
descriptor.value = function (...args) {
Object.keys(target.validators).forEach((key) => {
if (!target.validators[key](args)) {
throw new BadRequestException();
}
});
method.apply(this, args);
};
}
parameterDeco(): string {
const testInstance = new ParameterDecorationTest();
testInstance.setName('daaa');
console.log('daaa print');
console.log('-------');
testInstance.setName('da');
console.log('da print');
return 'parameter decorator test.';
}
결과
즉, 숫자를 파라미터의 길이가 3을 초과하는것은 예외로 잡아낼 수 있다.
반응형
'재학습 > NestJS' 카테고리의 다른 글
[NestJS] [데코레이터] 속성 데코레이터 (0) | 2023.06.22 |
---|---|
[NestJS] [데코레이터] 접근자 데코레이터 (0) | 2023.06.20 |
[NestJS] [데코레이터] 메서드 데코레이터 (0) | 2023.06.19 |
[NestJS] [데코레이터] 클래스 데코레이터 (0) | 2023.06.18 |
[NestJS] [데코레이터] (0) | 2023.06.17 |