Decorators
클래스 선언, 메서드, 접근자, 프로퍼티 또는 매개 변수에 첨부할 수 있는 특수한 종류의 선언
✔️Decorator를 사용하기 위해 tsconfig.json 설정
npm i reflect-metadata --dave
yarn add reflect-metadata
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true,
"emitDecoratiorMetadata": true
}
}
Decorator Factories
데코레이터 함수를 반환하는 함수
고차함수=함수를 반환하는 함수
팩토리= 어떤 인스턴스를 생성하여 반환하는 함수, 메서드
function color(value: string) { // 데코레이터 팩토리
return function (target) { // 데코레이터
// 'target'과 'value' 변수를 가지고 무언가를 수행
}
}
Class Decorator
생성자 함수를 관찰, 수정, 오버라이딩(재정의) 가능
기존의 클래스의 코드를 변경하지 않고 property를 추가하거나 새성자 함수에서 기능을 추가 하고 싶을때 사용
(1) 값을 반환하지 않는 경우
클래스의 기존 생성자 함수를 그대로 사용함
(2) 값을 반환하는 경우
데코레이터가 값을 반환하면 그 반환값으로 생성자 함수를 교체함
기존 생성자 함수에 기능을 확장하고 싶을때
class extends constructor와 같이 생성자 함수를 확장하여 반환
💥사용시 주의사항
-데코레이터로 class에 property를 추가해도 type system에서는 알지 못함 (데코레이터가 런타임에서 호출되기 때문)
-d.ts파일(타입 선언 파일), declare class 에서는 사용할 수 x