装饰器代码什么时候执行?

ove*_*nge 1 typescript ecmascript-6

对于下面给出的语法,

import validator from "./ZipCodeValidator";
Run Code Online (Sandbox Code Playgroud)

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

看起来像ZipCodeValidator.ts

export class C {
    @f()
    @g()
    method() {}
}
Run Code Online (Sandbox Code Playgroud)

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

log*_*yth 5

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

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

装饰器函数本身总是可以method在调用时改变以调用一些自定义逻辑method,但装饰器本身早已完成。