装饰器

装饰器用于在声明(、方法、字段、存取器、参数)上附加元数据或包装逻辑。TC39 提案与 TypeScript 实现对齐过程较长,务必确认当前 TS 版本tsconfig 使用的阶段。


新标准装饰器(Stage 3,TS 5.x+ 常用路径)

  • 语法:@foo 置于声明前。
  • 再依赖旧版 experimentalDecorators 的语义;具体行为以 TS 手册 · Decorators 为准。
  • 常与 reflect-metadata、DI 框架配合(运行时仍需 polyfill/emit 支持)。

遗留:experimentalDecorators

较老代码与 Angular 部分版本等仍开启:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

与标准装饰器语义不同;迁移时需逐类对照。


典型用途

  • :注册路由、ORM 实体、组件元数据。
  • 方法:节流、权限校验、autobind 风格绑定。
  • 字段:序列化、校验;注意与 useDefineForClassFields 的字段初始化顺序交互。

类型侧

装饰器函数签名随阶段变化;库一般会导出已类型化的工厂 function Log(): ClassDecorator


相关链接

  • (可见性、字段初始化)
  • tsconfig配置experimentalDecoratorsemitDecoratorMetadatauseDefineForClassFields