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

标签 typescript ecmascript-6 typescript2.2 class-validator

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

export default class Order {
   purchaseDate: Date;
   @MinDate(this.purchaseDate)
   receiptDate: Date;
}

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

换句话说, typescript 装饰器可以从对象接收运行时值,还是这些值必须在编译时可用?例如:
@MinDate(new Date(12/22/2017));  //This should work?
@MinDate(this.someDate) // This will never work?

最佳答案

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

使用静态值将起作用:

@MinDate(new Date(12/22/2017));

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

你可以在没有装饰器的构造函数中做到这一点:
export default class Order {
    ...
    constructor() {
        this.purchaseDate = ...
        this.receiptDate = this.purchaseDate;
    }
}

关于typescript - 是否可以在运行时传递 Typescript 装饰器对象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742615/

相关文章:

typescript - 如何在 addEventListener 上键入 currentTarget

javascript - 如何为类的属性赋予 req.body 值?

javascript - 如何在没有 HTTP 的情况下从 Angular2 (TypeScript) 中的 json 获取数据?

javascript - 基于类/命名空间的代码组织与 JavaScript/Node.js 相关吗?

typescript - 将数据字段与导致错误的可区分联合链接起来

javascript - 使用 TypeScript 接口(interface)在 JS 代码中进行运行时验证

javascript - 如何从字符串中获取一组单词?

javascript - 如何仅显示具有指定值的条目的对象键

javascript - Node4 使用 gulp 支持 TypeScript 到 EcmaScript2015

javascript - 为什么 TS 提示函数体内的函数声明