Hogyan testre tulajdonságok géppel

szavazat
10

Hogy jutok géppel bocsát ki a tulajdonságokat, mint például:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
A kérdést 02/10/2012 19:40
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
9

Használhatja getés setgéppel, amely összeállítja a Object.defineProperties.

Ez egy ECMAScript 5 funkció, így nem lehet használni, ha célzott ES3 (alapértelmezett a fordító). Ha elégedett a cél ES5, add --target ES5a parancs.

Gépelt:

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

Gyűjt össze:

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

De ha a teljes irányítást a beállítás felsorolható és konfigurálható - akkor még mindig használja a nyers Object.definePropertieskódot.

Válaszolt 04/10/2012 22:42
a forrás felhasználó

szavazat
4

Kerestem pontosan ugyanezt, amikor belebotlottam géppel Handbook: Lakberendezők . A „módszer Lakberendezők” bekezdés meghatározzák @enumerabledekoratőr gyár, amely úgy néz ki, mint ez (én csak a fájl létrehozásával onnan):

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

és használják, mint ez:

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

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

Tehát egy másik módja az, az, a használat révén a lakberendezők.

PS: Ez a funkció csak experimentalDecoratorsflag kell átadni tsc, vagy állítsa be tsconfig.json.

Válaszolt 27/02/2017 16:39
a forrás felhasználó

szavazat
1

Ez jelenleg nem támogatott, ha szeretné az összes tulajdonságait kibocsátandó ilyesmi. Én azt javasolnám a bejelentés egy probléma a CodePlex helyszínen részleteit, hogy mi az Ön használati és követelményeket.

Ha nem fordítasz --target ES5, akkor van valami, mint ez:

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

Amely termel ezt a kódot:

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;
})();
Válaszolt 02/10/2012 19:43
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more