TypeScript 面试题
目录

请解释如何使用装饰器实现性能监控?

· 约 3 分钟读完 · 第 204 / 256 章

推荐答案

本题详细解读

装饰器基础

装饰器是一种特殊类型的声明,它可以被附加到类声明、方法、访问器、属性或参数上。装饰器使用 @expression 的形式,其中 expression 必须是一个函数,它会在运行时被调用,被装饰的声明信息作为参数传入。

性能监控装饰器的实现

  1. 装饰器函数定义:performanceMonitor 是一个方法装饰器,它接收三个参数:

    • target:对于静态成员来说是类的构造函数,对于实例成员来说是类的原型。
    • propertyKey:被装饰的方法的名称。
    • descriptor:被装饰方法的属性描述符。
  2. 保存原始方法:在装饰器内部,首先保存原始方法的引用 originalMethod。

  3. 重写方法:通过修改 descriptor.value,将原始方法替换为一个新的函数。这个新函数在执行原始方法之前记录开始时间,执行之后记录结束时间,并计算并输出执行时间。

  4. 返回描述符:最后返回修改后的 descriptor,以便 TypeScript 能够正确地应用这个装饰器。

使用示例

在 MyClass 类中,myMethod 方法被 @performanceMonitor 装饰器修饰。当调用 myMethod 时,装饰器会自动记录并输出该方法的执行时间。

注意事项

  • 装饰器目前是 TypeScript 的实验性功能,需要在 tsconfig.json 中启用 experimentalDecorators 选项。
  • 装饰器可以用于多种场景,如日志记录、性能监控、权限控制等,灵活使用可以大大增强代码的可维护性和可扩展性。