Hoe te eigenschappen in typoscript aanpassen

stemmen
10

Hoe krijg ik Typescript om eigenschapdefinities uitstoten, zoals:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
De vraag is gesteld op 02/10/2012 om 19:40
bron van user
In andere talen...                            


3 antwoorden

stemmen
9

U kunt gebruik maken geten setin typoscript, die afkomstig zijn in Object.defineProperties.

Dit is een ECMAScript 5 functie, dus je kunt het niet gebruiken als u zich richt op ES3 (standaard voor de compiler). Als u tevreden te richten ES5 zijn, toe te voegen --target ES5aan uw commando.

typoscript:

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

Compileert naar:

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

Maar als je de volledige controle over het instellen van opsombare en configureerbare wilt - kunt u nog steeds gebruik maken van de ruwe Object.definePropertiescode.

antwoordde op 04/10/2012 om 22:42
bron van user

stemmen
4

Ik was op zoek naar precies hetzelfde toen ik struikelde over typoscript Handbook: decorateurs . In "Methode decorateurs" paragraaf definiëren ze @enumerabledecorateur fabriek, die er als volgt uitziet (ik ben gewoon kopiëren-plakken van daar):

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

en ze gebruiken het als volgt:

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

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

Dus een andere manier van aanpak ervan, is door middel van het gebruik van decorateurs.

PS: Voor deze functie moet experimentalDecoratorsde vlag worden doorgegeven aan tscof in tsconfig.json.

antwoordde op 27/02/2017 om 16:39
bron van user

stemmen
1

Dit wordt momenteel niet ondersteund als u wilt dat alle eigenschappen uit te zenden als dat. Ik zou het indienen van een probleem bij de CodePlex website met informatie over wat uw use case en eisen zijn.

Als je compileren met --target ES5, kun je zoiets als dit:

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

Welke produceert deze code:

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;
})();
antwoordde op 02/10/2012 om 19:43
bron van user

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