面试题答案
一键面试TypeScript 装饰器基本概念
TypeScript 装饰器是一种特殊的声明,它能够附加到类声明、方法、访问器、属性或参数上,用于对这些目标进行元编程,添加额外的行为或修改它们的特性。
装饰器类型
- 类装饰器:应用于类的构造函数,可用于监视、修改或替换类定义。例如,可以修改类的原型,添加新的方法。
- 方法装饰器:应用于类的方法,能在方法定义时进行元编程操作,如修改方法的属性描述符,添加额外的逻辑。
- 访问器装饰器:应用于类的访问器(getter 或 setter),可用于修改访问器的属性描述符或添加额外逻辑。
- 属性装饰器:应用于类的属性,可用于在属性定义时添加元数据,比如标记属性的用途。
- 参数装饰器:应用于函数或方法的参数,可用于获取参数的元数据,如在方法调用前对参数进行验证。
实现日志记录功能的装饰器结构设计
// 方法装饰器实现日志记录
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`调用方法 ${propertyKey},参数为:`, args);
const result = originalMethod.apply(this, args);
console.log(`方法 ${propertyKey} 执行完毕,返回结果:`, result);
return result;
};
return descriptor;
}
class Example {
@log
add(a: number, b: number) {
return a + b;
}
}
const example = new Example();
example.add(1, 2);
在上述代码中,定义了一个 log
方法装饰器,它会在方法调用前后打印日志信息,记录方法名、参数以及返回结果。通过 @log
语法将装饰器应用到 Example
类的 add
方法上。