Nasıl gibi mülkiyet tanımlarını yayacak şekilde typescript alabilirim:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Nasıl gibi mülkiyet tanımlarını yayacak şekilde typescript alabilirim:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
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.
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.
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;
})();