Daktilo özelliklerini özelleştirmek için nasıl

oy
10

Nasıl gibi mülkiyet tanımlarını yayacak şekilde typescript alabilirim:

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
Oluştur 02/10/2012 saat 19:40
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
9

Sen kullanabilirsiniz getve settypescript, içinde içine derlemek hangi Object.defineProperties.

Bu, bir ECMAScript 5 özelliktir, bu nedenle ES3 (derleyici için varsayılan) hedefliyorsanız bunu kullanamazsınız. Eğer ES5 hedeflemek için mutlu değilseniz, eklemek --target ES5komutunuza.

typescript:

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

derler:

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

Eğer enumerable ve yapılandırılabilir ayarı tam kontrol istiyorsanız - hala çiğ kullanabilirsiniz Object.definePropertieskodu.

Cevap 04/10/2012 saat 22:42
kaynak kullanıcı

oy
4

Ben tökezledi zaman tam olarak aynı şeyi arıyordu typescript El Kitabı: dekoratörler . "Yöntem Dekoratörler" paragrafta onlar tanımlamak @enumerableşöyle dekoratör fabrikası, (Ben sadece oradan-yapıştırma kopyalayın):

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

ve bu gibi kullanabilirsiniz:

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

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

Yani onu ele bir başka yolu, dekoratörler kullanımı geçer.

Not: Bu özellik gerektiren experimentalDecoratorsbayrağını geçirilecek tscveya set tsconfig.json.

Cevap 27/02/2017 saat 16:39
kaynak kullanıcı

oy
1

Eğer tüm özelliklerini böyle yayılan olmak istiyorsanız bu şu anda desteklenmemektedir. Ben de bir sorunu dosyalama öneriyoruz codeplex sitesinde Kullanım durumunuz ve şartlar nelerdir ilgili ayrıntılarla.

Eğer --target ES5 ile derlemek yaparsanız, böyle bir şey olabilir:

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

Hangisi bu kodu üretir:

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;
})();
Cevap 02/10/2012 saat 19:43
kaynak kullanıcı

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