跳到主要内容

如何使用 TypeScript 创建和使用装饰器?

参考答案:

在 TypeScript 中,装饰器是一种特殊类型的声明,它可以被附加到类声明,方法,属性或参数上。装饰器使用 @expression 这样的形式,其中 expression 必须计算为一个函数,该函数将在运行时被调用。

以下是如何在 TypeScript 中创建和使用装饰器的基本步骤:

  1. 定义装饰器

装饰器函数接受目标对象作为第一个参数,然后是其他可选参数。以下是一个简单的装饰器示例,它将一个类的所有方法打印出来:

function logMethods(target: any) {
  const originalMethods = Object.getOwnPropertyNames(target.prototype);

  for (let methodName of originalMethods) {
    const originalMethod = target.prototype[methodName];

    target.prototype[methodName] = function (...args: any[]) {
      console.log(`Calling ${methodName} with args: ${JSON.stringify(args)}`);
      return originalMethod.apply(this, args);
    };
  }
}
  1. 使用装饰器

使用 @decoratorName 的形式将装饰器应用到类、方法、属性或参数上。以下是如何将上面的装饰器应用到类上:

@logMethods
class MyClass {
  myMethod(arg: string) {
    console.log(`Hello, ${arg}!`);
  }
}

const instance = new MyClass();
instance.myMethod("world");  // 输出 "Calling myMethod with args: ["world"]" 和 "Hello, world!"

注意,装饰器是实验性的 TypeScript 功能,并且可能在未来的版本中有所更改。因此,在生产环境中使用它们时,需要谨慎。另外,装饰器目前需要 Babel 或 TypeScript 的 experimentalDecorators 编译选项才能工作。

以上就是在 TypeScript 中创建和使用装饰器的基本步骤。希望对你有所帮助!