는 일반적으로 나는이 같은 장식을 적용개체 속성에 데코레이터를 사용할 수 있습니까?
class SpecialMethods {
@Deco
static someMethod() {
}
}
는 클래스가 아닌 일반 객체를 사용하는 몇 가지 방법이있다 :
const SpecialMethods = {
@Deco
someMethod:() => {}
}
는 일반적으로 나는이 같은 장식을 적용개체 속성에 데코레이터를 사용할 수 있습니까?
class SpecialMethods {
@Deco
static someMethod() {
}
}
는 클래스가 아닌 일반 객체를 사용하는 몇 가지 방법이있다 :
const SpecialMethods = {
@Deco
someMethod:() => {}
}
네,하지만 매우 실용적이지. 객체의 속성에 대해 데코레이터를 호출 할 수 있지만 클래스 및 그 내용을 꾸미는 것과는 다릅니다.
주어진 다음의 장식 : 클래스에 다음과 같이
const TestDecorator = (at: string) => {
return function (target: any, prop: string, descriptor?: PropertyDescriptor) {
console.log(`decorated at ${at}}`);
}
}
사용되는 : 그러나
class TestClass {
@TestDecorator('class method')
public testMethod() { }
}
, 그것은 속성에 대해 위와 같은 방법을 적용 할 수 없습니다 :
const testObj = {
@TestDecorator('property method')
testMethod:() => { }
};
이 문제를 해결하려면 속성에서 데코레이터를 호출 할 수 있습니다.
처음에는 모든 특성을 가진 개체를 선언해야 : 수동 속성에 대한 deco
장식을 호출해야 이제
const deco = TestDecorator('property method');
:
const testObj = {
testMethod:() => { }
};
내 장식은 카레 값을 기대 testObj
:
deco(testObj, 'testMethod');
(가 영업 이익에없는) 당신의 장식에 propertyDescriptor
이 필요합니다, 당신은 수동으로뿐만 아니라 그것을 제공해야합니다 :
deco(testObj, 'testMethod', Object.getOwnPropertyDescriptor(testObj, 'testMethod'));
가 TS playground이다. 콘솔에서 출력을 확인하십시오.
어떤 데코레이터를 사용 하시겠습니까? 그 제안들? –
'추상 클래스 '란 무엇입니까? 이것은 자바 스크립트처럼 보이지 않습니다. – Bergi
@Bergi 죄송합니다, 현재 타이프 크립을 사용하고 있습니다. 추상을 제거했습니다. – Chris