Cum de a personaliza proprietățile dactilografiat

voturi
10

Cum pot obține typescript să emită definiții de proprietate, cum ar fi:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
Întrebat 02/10/2012 la 19:40
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
9

Puteți folosi getși setdactilografiat, care compila în Object.defineProperties.

Aceasta este o caracteristică ECMAScript 5, astfel încât să nu se poate utiliza dacă vizați ES3 (implicit pentru compilator). Dacă sunteți fericit să vizați ES5, adăugați --target ES5la comanda.

typescript:

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

Compilează la:

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

Dar dacă doriți un control complet al setarea enumerable și configurabil - ai putea folosi în continuare brut Object.definePropertiescod.

Publicat 04/10/2012 la 22:42
sursa de către utilizator

voturi
4

Am fost în căutarea pentru exact același lucru atunci când am dat peste typescript Manual: decoratori . În „Metoda Decoratorii“ punctul ei definesc @enumerablefabrica decorator, care arata ca acest lucru (eu sunt pur și simplu copiați-lipirea de acolo):

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

și o folosesc ca aceasta:

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

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

Deci, un alt mod de a aborda aceasta, este prin utilizarea de decoratori.

PS: Această funcție necesită experimentalDecoratorspavilion să fie transmise tscsau stabilit în tsconfig.json.

Publicat 27/02/2017 la 16:39
sursa de către utilizator

voturi
1

Acest lucru nu este acceptată în prezent , dacă doriți ca toate proprietățile să fie emise așa. Aș recomanda depunerea unei probleme la site - ul CodePlex cu detalii despre modul dvs. de utilizare și cerințele sunt.

Dacă faci compila cu --target ES5, puteți avea ceva de genul:

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

Care produce acest cod:

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;
})();
Publicat 02/10/2012 la 19:43
sursa de către utilizator

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