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

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

相关文章:

  • 从杰夫・托尔纳看 BPLG 公司的技术创新与发展
  • LeetCode 39 LeetCode 40 组合总和问题详解:回溯算法与剪枝优化(Java实现)
  • Python爬虫实战:获取woodo网各类免费图片,积累设计素材
  • [题解]2023CCPC黑龙江省赛 - Folder
  • 服务预热原理
  • 批量统计PDF页数,统计图像属性
  • 求数组中的两数之和--暴力/哈希表
  • Java 23种设计模式 - 行为型模式11种
  • JAVA——抽象类和接口的区别
  • A2A大模型协议及Java示例
  • jdk多版本切换,通过 maven 指定编译jdk版本不生效,解决思路
  • 使用lldb查看Rust不同类型的结构
  • cv_connection (像halcon一样对区域进行打散)
  • Markdown—LaTeX 数学公式
  • PCB设计实践(十二)PCB设计电容选型:功能、材质、规则
  • 数据结构与算法分析实验12 实现二叉查找树
  • 问题及解决01-面板无法随着窗口的放大而放大
  • 【论文阅读】Efficient and secure federated learning against backdoor attacks
  • Client 和 Server 的关系理解
  • 【AI智能推荐系统】第七篇:跨领域推荐系统的技术突破与应用场景
  • 国际业务网站有哪些/现在最好的营销方式
  • 做盗号网站/《新闻联播》 今天
  • 夷陵网/百度seo怎么收费
  • 东莞寮步网站设计/网络营销中的seo与sem
  • 北京知名网站设计公司/网络营销个人感悟小结
  • 梵克雅宝官网中国官方网站/开网店怎么开 新手无货源