2012-10-02 4 views

답변

4

나는 우연히 만났을 때 TypeScript Handbook: Decorators과 똑같은 것을 찾고있었습니다.

function enumerable(value: boolean) { 
    return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) { 
     descriptor.enumerable = value; 
    }; 
} 

그들은 다음과 같이 사용 :

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
     this.greeting = message; 
    } 

    @enumerable(false) 
    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

그래서 "방법 장식"단락에서 그들은 (I 단순히 거기에서 붙여 넣기를 복사하고 있습니다) 다음과 같습니다 @enumerable 장식 공장을 정의 그것을 다루는 다른 방법은 데코레이터의 사용을 통한 것입니다.

PS : 이 기능은 experimentalDecorators 플래그가 tsc에 전달 또는 tsconfig.json에서 설정해야합니다.

1

. 사용 사례 및 요구 사항에 대한 세부 정보가 포함 된 CodePlex site에 문제를 제기하는 것이 좋습니다. 이 코드 생성

class n { 
    get foo() { return 3; } 
    bar() { return 5; } 
} 

: 당신이 --target ES5 컴파일 할 경우

, 당신은 같은 것을 할 수 있습니다

var n = (function() { 
    function n() { } 
    Object.defineProperty(n.prototype, "foo", { 
     get: function() { 
      return 3; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
    n.prototype.bar = function() { 
     return 5; 
    }; 
    return n; 
})(); 
+0

예, 'enumerable', 'configurable'및 'writable'속성을 기존 코드와 일치하도록 사용자 정의하는 방법을 찾고 있습니다. – Spongman

9

당신은 타이프에 getset을 사용할 수 있습니다, 어떤 Object.defineProperties으로 컴파일하십시오.

이것은 ECMAScript 5 기능이므로 ES3 (컴파일러의 기본값)을 대상으로하는 경우에는 사용할 수 없습니다. 행복하게 ES5를 타겟팅하려면 명령에 --target ES5을 추가하십시오.

타이프 :

class MyClass { 
    private view; 
    get View() { return this.view; } 
    set View(value) { this.view = value } 
} 

가 컴파일 :

var MyClass = (function() { 
    function MyClass() { } 
    Object.defineProperty(MyClass.prototype, "View", { 
     get: function() { 
      return this.view; 
     }, 
     set: function (value) { 
      this.view = value; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
    return MyClass; 
})(); 

하지만 열거 및 구성 설정을 완벽하게 제어하려면 - 당신은 여전히 ​​원시 Object.defineProperties 코드를 사용할 수 있습니다.

관련 문제