// tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"experimentalDecorators": true
}
}
데코레이터 이란
function fistDecorator(target, name) {
console.log('fistDecorator');
}
class Person {
@fistDecorator
job = 'programmer';
}
const p = new Person();
console.log(p.job);
// 실행결과
// 1. fistDecorator
// 2. programmer
데코레이터 팩토리
function firstDecorator(param) {
console.log('factory’);
return function(target, name) {
console.log('decorator');
}
}
class SomeClass {
@firstDecorator(123)
prop = ‘a';
}
console.log('인스턴스가 만들어지기 전');
console.log(new SomeClass());
// 실행결과
// 1. factory
// 2. decorator
// 3. 인스턴스가 만들어지기 전
데코레이터 여러개 적용
function decoA(param) {
console.log('decoA factory');
return function(target, name) {
console.log('decyA decorator')
}
}
function decoB(target, name) {
console.log('decoB decorator');
}
function decoC(param) {
console.log('decoC factory');
return function(target, name) {
console.log('decoC decorator');
}
}
class SomeClass {
@decoA(1)
@decoB
@decoC(2)
prop = 1;
}
// 실행결과
// 1. decoA factory
// 2. decoC factory
// 3. decoC decorator
// 4. decoB decorator
// 5. decoA decorator