Slik tilpasser eiendommer i Loggfila

stemmer
10

Hvordan får jeg Loggfila til å avgi egenskapsdefinisjoner for eksempel:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
Publisert på 02/10/2012 klokken 18:40
kilden bruker
På andre språk...                            


3 svar

stemmer
9

Du kan bruke getog seti maskinskrevet manuskript, som kompilere inn Object.defineProperties.

Dette er en ECMAScript 5 funksjonen, slik at du kan ikke bruke den hvis du er rettet ES3 (standard for kompilatoren). Hvis du er glad for å målrette ES5, legge --target ES5til din kommando.

Loggfila:

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

Kompilerer til:

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

Men hvis du vil ha full kontroll over innstillingen enumerable og konfigurerbar - du kan fortsatt bruke den rå Object.definePropertieskode.

Svarte 04/10/2012 kl. 21:42
kilden bruker

stemmer
4

Jeg var ute etter akkurat det samme da jeg snublet over Loggfila Handbook: dekoratører . I "Metode dekoratører" paragrafen definerer de @enumerabledekoratør fabrikken, som ser slik ut (jeg er bare kopiere lime derfra):

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

og de bruker det slik:

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

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

Så en annen måte å håndtere det, er gjennom bruk av dekoratører.

PS: Denne funksjonen krever experimentalDecoratorsflagget som skal sendes til tsceller satt i tsconfig.json.

Svarte 27/02/2017 kl. 16:39
kilden bruker

stemmer
1

Dette støttes ikke hvis du vil at alle egenskapene som skal slippes ut sånn. Jeg vil anbefale å sende inn en sak på CodePlex nettstedet med informasjon om hva din bruk saken og kravene er.

Hvis du kompilere med Target ES5, kan du ha noe sånt som dette:

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

Som produserer denne koden:

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;
})();
Svarte 02/10/2012 kl. 18:43
kilden bruker

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