是否可以在运行时传递 Typescript 装饰器对象值?

Ole*_*Ole 5 typescript ecmascript-6 typescript2.2 class-validator

我有一个用 @MinDate 约束装饰的类,如下所示:

export default class Order {
   purchaseDate: Date;
   @MinDate(this.purchaseDate)
   receiptDate: Date;
}
Run Code Online (Sandbox Code Playgroud)

当尝试验证其实例Order是否有效时,会出现验证错误。我的问题是是否可以/有效地将其this.purchaseDate作为参数传递给@MinDate()装饰器。

换句话说,打字稿装饰器可以从对象接收运行时值,还是这些值必须在编译时可用?例如:

@MinDate(new Date(12/22/2017));  //This should work?
@MinDate(this.someDate) // This will never work?
Run Code Online (Sandbox Code Playgroud)

Nit*_*mer 4

不,你不能那样做。
装饰器应用于类而不是实例,这意味着this调用装饰器函数时不存在装饰器。

使用静态值将起作用:

@MinDate(new Date(12/22/2017));
Run Code Online (Sandbox Code Playgroud)

但您不能为其使用实例成员。

您可以在不使用装饰器的构造函数中执行此操作:

export default class Order {
    ...
    constructor() {
        this.purchaseDate = ...
        this.receiptDate = this.purchaseDate;
    }
}
Run Code Online (Sandbox Code Playgroud)