Как получить машинопись испускать определение свойств, такие как:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Как получить машинопись испускать определение свойств, такие как:
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
Вы можете использовать getи setв машинописном, который компилировать в Object.defineProperties.
Это функция ECMAScript 5, так что вы не можете использовать его , если вы ориентируетесь ES3 (по умолчанию для компилятора). Если вы счастливы целевой ES5, добавить --target ES5к вашей команде.
Машинопись:
class MyClass {
private view;
get View() { return this.view; }
set View(value) { this.view = value }
}
Компилируется:
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;
})();
Но если вы хотите иметь полный контроль над установкой перечислима и настраивается - можно по- прежнему использовать необработанный Object.definePropertiesкод.
Я искал точно то же самое , когда я наткнулся на машинописи Handbook: декоратор . В «Метод Декораторы» пункта они определяют @enumerableдекоратора завод, который выглядит следующим образом (я просто скопировать-вставки оттуда):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
и они используют его как это:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
Так еще один способ ее решения, через использование декораторов.
PS:
Эта функция требует experimentalDecoratorsфлага должны быть переданы tscили установить в tsconfig.json.
Это в настоящее время не поддерживается , если вы хотите , чтобы все свойства , которые будут посылаться как это. Я бы рекомендовал подав вопрос на сайте CodePlex с подробной информацией о том , что ваш случай использования и требования.
Если вы компилируете с --target ES5, вы можете иметь что-то вроде этого:
class n {
get foo() { return 3; }
bar() { return 5; }
}
Что дает этот код:
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;
})();