Ответ 1
То, что вы пытаетесь сделать, невозможно.
Декораторы вызываются при объявлении класса и в это время нет экземпляра, который должен пройти в декоратор.
Например, с помощью этого кода:
class MyClass {
startDateString: string;
@property({ afterDate: this.startDateString })
endDateString: string;
}
let myClass = new MyClass();
-
MyClass
объявлен. - Декораторы работают на
MyClass
. В этой точке нет экземпляра, который существует, иthis
в аргументе декоратора ссылается на глобальный объект, а не на экземпляр. -
new MyClass()
вызывается и создается экземпляр. На этом этапе декораторы не вызываются. Это уже произошло.
Взгляните на скомпилированный JavaScript для справки:
var MyClass = (function () {
// -- 1 --
function MyClass() {
}
// -- 2 --
__decorate([
// see here... `this` is equal to the global object
property({ afterDate: this.startDateString })
], MyClass.prototype, "endDateString", void 0);
return MyClass;
})();
// -- 3 --
var myClass = new MyClass();
Обратите внимание, что использование this.startDateString
не генерирует ошибку компиляции, потому что this
вводится как any
.
Так что то, что делается здесь, путем передачи в свойстве экземпляра, не имеет смысла и не представляется возможным.
Что вы можете сделать, это сделать startDateString
static, а затем передать его так: @property({ afterDate: MyClass.startDateString })
.