2012-10-02 9 views

Antwort

4

Ich suchte genau das gleiche, als ich auf stolperte. In „Method Zierer“ Absatz definieren sie @enumerable Dekorateur Fabrik, die wie folgt aussieht (Ich bin Copy- Einfügen einfach von dort):

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

und sie es wie folgt verwendet werden:

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

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

So Eine andere Möglichkeit, dies zu tun, ist die Verwendung von Dekoratoren.

PS: Diese Funktion erfordert experimentalDecorators Flag auf tsc oder setzen in tsconfig.json weitergegeben werden.

1

Dies wird derzeit nicht unterstützt, wenn Sie alle wollen, dass die Eigenschaften wie die emittiert werden. Ich würde empfehlen, ein Problem bei der CodePlex site mit Details über Ihre Anwendungsfall und Anforderungen sind.

Wenn Sie mit --target ES5 kompilieren tun, können Sie so etwas wie dieses:

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

Welche diesen Code erzeugt:

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

Ja, ich bin auf der Suche nach einer Möglichkeit, die 'aufzählbaren', 'konfigurierbaren' und 'beschreibbaren' Attribute anzupassen, um sie meinem vorhandenen Code anzupassen. – Spongman

9

Sie get und set in Typoskript verwenden können, die kompilieren Sie in Object.defineProperties.

Dies ist eine ECMAScript 5-Funktion, daher können Sie sie nicht verwenden, wenn Sie ES3 als Standard für den Compiler verwenden. Wenn Sie ES5 als Ziel verwenden möchten, fügen Sie Ihrem Befehl --target ES5 hinzu.

Typoskript:

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

Compiliert zu:

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; 
})(); 

Aber wenn Sie die volle Kontrolle wollen zählbare und konfigurierbar neu eingestellt werden - Sie noch den rohen Object.defineProperties Code verwenden könnten.