装饰器
装饰器用于在声明(类、方法、字段、存取器、参数)上附加元数据或包装逻辑。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配置(
experimentalDecorators、emitDecoratorMetadata、useDefineForClassFields)