当前位置: 首页 > ds >正文

ts装饰器

TypeScript 装饰器是一种特殊类型的声明,能够被附加到类声明、方法、访问符、属性或参数上。它本质上是一个函数,会在运行时被调用,并且被装饰的声明信息会作为参数传递给装饰器函数。

装饰器的分类

  1. 类装饰器

    • 类装饰器作用于类构造函数,可以修改或替换类定义。例如,可以使用类装饰器来禁止修改类的构造函数和原型。

    function Sealed(constructor: Function) {Object.seal(constructor);Object.seal(constructor.prototype);
    }@Sealed
    class Report {title: string;constructor(t: string) { this.title = t; }
    }
  2. 方法装饰器

    • 方法装饰器接收三个参数:目标类原型、方法名、方法描述符。它可以用于添加日志、权限控制或缓存逻辑。

    function Cache(target: any, methodName: string, descriptor: PropertyDescriptor) {const originalMethod = descriptor.value;const cache = new Map();descriptor.value = function (...args: any[]) {const key = JSON.stringify(args);return cache.get(key) || (cache.set(key, originalMethod.apply(this, args)), cache.get(key));};
    }class MathService {@Cachefibonacci(n: number): number { /* 计算逻辑 */ }
    }
  3. 属性装饰器

    • 属性装饰器接收两个参数:目标类原型或类构造函数、属性名。它可以用于验证属性值或添加元数据。

    function Format(target: any, propertyKey: string) {let value = target[propertyKey];Object.defineProperty(target, propertyKey, {set: (newVal) => { value = newVal.toUpperCase(); },get: () => value});
    }class User {@Formatname: string;
    }
  4. 参数装饰器

    • 参数装饰器接收三个参数:目标类原型或类构造函数、方法名、参数索引。它可以用于对类方法中的参数进行注解。

装饰器的使用

要使用装饰器,需要在 tsconfig.json 文件中启用 experimentalDecorators 选项。

{"compilerOptions": {"experimentalDecorators": true}
}

装饰器的执行顺序

  • 装饰器表达式从上到下评估(工厂函数执行)。

  • 装饰器函数从下到上调用(装饰逻辑执行)。

  • 类装饰器最后执行。

  • 方法和访问器装饰器优先于属性装饰器执行。

装饰器在 TypeScript 中的应用场景非常广泛,可以用于日志记录、性能监控、参数验证等,能够帮助开发者在编译阶段进行复杂的操作,同时保持代码的整洁和解耦。

http://www.xdnf.cn/news/5435.html

相关文章:

  • IPM IMI111T-026H 高效风扇控制板
  • Python打卡 DAY 21
  • 免费 超轻量级便携 内存清理 验证win系统内存优化
  • DeepSeek:为环保领域插上智慧的翅膀
  • 子串简写(JAVA)一维前缀和, 蓝桥杯
  • 前端性能优化全攻略:从基础体验到首屏加载的深度实践
  • 一文理解扩散模型(生成式AI模型)(1)
  • 【工具记录分享】提取bilibili视频字幕
  • Activity动态切换Fragment
  • 医疗信息化江湖风云再起!金仓数据库亮相CHIMA 2025
  • Linux `ifconfig` 指令深度解析与替代方案指南
  • 基于ESP32控制的机器人摄像头车
  • 最小循环子数组 - 华为OD统一考试(Python题解)
  • 重力场模型、球谐函数以及重力异常
  • python3环境安装
  • 【ESP32+vscode】问题记录
  • visual studio 2015 安装闪退问题
  • [CLS] 向量是 BERT 类模型中一个特别重要的输出向量,它代表整个句子或文本的全局语义信息
  • Github 2025-05-10 Rust开源项目日报 Top10
  • TransmittableThreadLocal:穿透线程边界的上下文传递艺术
  • 数据库事务
  • GD32H7复位后程序调用函数时间增加
  • Linux 下 Java 部署环境搭建与项目部署详细步骤
  • 质数和约数
  • LabVIEW电涡流传感器自动校准系统
  • 【编译原理】总结
  • 由反激电源引起的一点儿分析
  • project从入门到精通(五)
  • Java ClassLoader双亲委派机制
  • 亿级流量系统架构设计与实战(六)