2017-05-02 1 views
0

J'ai une classe qui est décorée avec une contrainte @MinDate comme ceci:Est-il possible de passer des valeurs d'objet décorateur de type Typescript lors de l'exécution?

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

Lorsque vous tentez de valider une instance de Order valide les erreurs de validation sur. Ma question est est-il même possible/valide de passer en this.purchaseDate comme argument au décorateur @MinDate(). En d'autres termes, les décorateurs dactylographiés peuvent-ils recevoir des valeurs d'exécution d'un objet, ou ces valeurs doivent-elles être disponibles au moment de la compilation? Par exemple:

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

Répondre

2

Non, vous ne pouvez pas faire cela.
Les décorateurs sont appliqués aux classes et non aux instances, ce qui signifie qu'il n'y a pas this lorsque la fonction décorateur est invoquée.

En utilisant une valeur statique fonctionnera:

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

Mais vous ne pouvez pas utiliser un membre d'instance pour elle.

Vous pouvez le faire dans le constructeur sans décorateur:

export default class Order { 
    ... 
    constructor() { 
     this.purchaseDate = ... 
     this.receiptDate = this.purchaseDate; 
    } 
}