TypeScript(심화Ⅱ)

EunRyeong Park·2022년 9월 30일
0

typescript

목록 보기
9/11

Method Decorator
메서드를 관찰, 수정, 재정의 가능

메서드의 Property descriptor를 수정하거나
기존 메서드 앞 뒤로 기능을 추가하고 싶을때 사용 가능

  • 메서드 선언 직전에 선언된다
  • 메서드의 Property descriptor에 적용된다
  • 세가지 인자를 받는다
    - target : 정적 멤버에 대한 클래스의 생성자 함수 또는 인스턴스 멤버에 대한 클래스의 프로토타입
    - propertyKey : 메서드의 이름
    - descroptor: 메서드의 프로퍼티 설명자
  • 데코레이터가 값을 반환하면 propertyDescroptor이 교체된다
    (메서드를 교체하려면 descriptor.value에 새 함수 할당)

✔️compilerOptions에서 target이 'ES5'보다 낮은 경우
-property descriptor는 undefined
-반환값 무시
-메서드 데코레이터 시그니처 이해x

Accessor Decorator
접근자를 관찰, 수정, 재정의 가능

접근자의 propertu descripter에 적용되며 전달받는 매개변수가 메서드 데코레이터와 같음

  • descriptor의 get 또는 set에 새로운 함수를 할당하여 getter, setter 접근자를 수정 또는 교체 가능

✔️compilerOptions에서 target이 'ES5'보다 낮은 경우
-property descriptor는 undefined
-반환값 무시
-같은 프로퍼티에 대한 접근자 get, set 중 하나에만 데코레이팅 가능

Property Decorator
프로퍼티를 관찰, 수정, 재정의 가능

프로퍼티의 property descriptor을 수정하고 싶을때 사용
✓프로토타입 공유할때
✓symbol을 사용한 인스턴스 별 데코레이팅

  • 프로퍼티 선언 직전에 선언
  • 인스턴스가 아닌 클래스 프로토타입의 프로퍼티에 적용
  • 프로퍼티 데코레이터는 target, propertyKey 두가지 인자를 받음

(프로퍼티의 경우 인스턴스화 되기 전까지 프로퍼티가 초기화되는 것을 관찰하거나 수정할 수 없기 때문에 property descriptor를 매개변수로 하지 x)

Parameter Decorator
클래스의 생성자 함수 또는 메서드 선언 함수에 적용

메개변수가 메서드에서 선언되었다는 것을 관찰하는 데에만 사용 가능
(그 이상은 reflct-metadata 라이브러리 사용해야함)

  • 매개변수 선언 직전에 선언
  • 파라미터가 선언된 함수에 적용
  • 세가지 인자를 받음
    - target : 정적 멤버에 대한 클래스의 생성자 함수 또는 인스턴스 멤버에 대한 클래스의 프로토타입
    - propertyKey : 멤버의 이름
    - parameterIndex : 함수의 매개변수 목록에 있는 매개변수의 인덱스

0개의 댓글