typescript 装饰器示例
时间: 2024-04-22 14:19:16 浏览: 101
typescript装饰器
装饰器是 TypeScript 中的一种特殊类型的声明,它可以被附加到类声明、方法、属性或参数上,以修改类的行为。装饰器使用 `@` 符号紧跟在要装饰的目标之前。
以下是一个 TypeScript 装饰器的示例:
```typescript
// 定义一个装饰器函数
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
// 保存原始方法
const originalMethod = descriptor.value;
// 修改原始方法的行为
descriptor.value = function (...args: any[]) {
console.log(`Calling method ${propertyKey} with arguments: ${JSON.stringify(args)}`);
const result = originalMethod.apply(this, args);
console.log(`Method ${propertyKey} returned: ${JSON.stringify(result)}`);
return result;
};
return descriptor;
}
// 使用装饰器修饰一个类的方法
class MyClass {
@log
greet(name: string) {
return `Hello, ${name}!`;
}
}
// 创建实例并调用被装饰的方法
const obj = new MyClass();
console.log(obj.greet("Alice")); // 输出: Calling method greet with arguments: ["Alice"],Method greet returned: "Hello, Alice!"
```
在上面的示例中,我们定义了一个名为 `log` 的装饰器函数。它接收三个参数:`target` 表示被装饰的目标类的原型对象,`propertyKey` 表示被装饰的方法名,`descriptor` 表示被装饰的方法的属性描述符。
装饰器函数内部修改了原始方法的行为,添加了日志输出的功能。通过将装饰器应用于 `greet` 方法,我们可以在调用该方法时打印出方法的参数和返回值。
阅读全文