Decorator代码何时执行?

时间:2018-05-04 20:25:40

标签: typescript ecmascript-6

对于以下给定的语法,

import validator from "./ZipCodeValidator";

在当前名称空间中,在构建/捆绑时,将对象字典从ZipCodeValidator.ts导入到名称validator

ZipCodeValidator.ts的样子:

export class C {
    @f()
    @g()
    method() {}
}

装饰器(f& g)是否在构建/捆绑时运行import语句(上面)时执行ZipCodeValidator.ts中的方法注释?

1 个答案:

答案 0 :(得分:4)

执行类声明时总是执行装饰器。由于大多数类声明通常位于模块的顶级范围内,因此可以表示它们在执行代码时运行,但没有什么能阻止您在另一个函数内部进行类声明,在这种情况下,装饰器只会在调用该函数时运行。

在您的特定情况下,装饰器工厂method将在声明期间运行以返回实际的装饰器函数,然后类声明将调用装饰器。

当调用method时,装饰器函数本身总是可以改变{{1}}来调用一些自定义逻辑,但是装饰器本身就很久了。