Jak upravit vlastnosti na psacím stroji

hlasů
10

Jak získám strojopisem emitovat definice vlastností, jako je:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
Položena 02/10/2012 v 19:40
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
9

Můžete použít geti setna stroji, který sestaví do Object.defineProperties.

To je ECMAScript 5 funkce, takže jej nelze použít, pokud jste se zaměřují ES3 (výchozí nastavení pro kompilátor). Pokud jste spokojeni se zaměřit ES5, přidat --target ES5do svého velení.

strojopisem:

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

Sestavuje na adresu:

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

Ale pokud chcete plnou kontrolu nad nastavením enumerable a konfigurovatelný - můžete i nadále používat syrové Object.definePropertieskód.

Odpovězeno 04/10/2012 v 22:42
zdroj uživatelem

hlasů
4

Hledal jsem přesně to samé, když jsem narazil na psacím stroji Příručky: dekoratéry . V „Metoda dekoratérů“ odstavce definují @enumerabledekoratér továrny, která vypadá takto (Jsem jednoduše zkopírovat-vkládání odtamtud):

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

a oni ho používají takto:

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

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

Tak další způsob, jak ji řešit, je přes použití dekoratérů.

PS: Tato funkce vyžaduje experimentalDecoratorspříznak které mají být předány tscnebo nastavit tsconfig.json.

Odpovězeno 27/02/2017 v 16:39
zdroj uživatelem

hlasů
1

To v současné době není podporována, pokud chcete, aby všechny vlastnosti, které mají být emitovány takhle. Doporučoval bych podání problém na místě CodePlex s podrobnostmi o tom, co váš případ použití a požadavky.

Pokud tak učiníte kompilace s --target ES5, můžete mít něco takového:

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

Který produkuje tento kód:

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;
})();
Odpovězeno 02/10/2012 v 19:43
zdroj uživatelem

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