装饰器是TypeScript语言中的一种特性,它允许开发者在类声明的成员声明前添加元数据。这些元数据可以是任何JavaScript表达式,通常用于增强类的功能或者改变类的行为。 装饰器可以应用于类、方法、属性、参数、访问器、枚举、接口、类型等声明。 例如,我们可以使用装饰器来添加日志记录功能,如下所示: ```typescript function log(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) { console.log(`Accessing property ${propertyKey} of ${target.name}`); return descriptor; } class MyClass { @log myProperty: string; } let myInstance = new MyClass(); myInstance.myProperty = "Hello, World!"; ``` 在这个例子中,`@log`是一个装饰器,它被应用在`MyClass`的`myProperty`属性上。当我们访问`myProperty`时,装饰器会自动添加日志记录功能。 装饰器也可以用于实现类的懒加载,如下所示: ```typescript function lazy(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) { let value: any = descriptor.value; descriptor.value = function() { return new Promise((resolve) => { setTimeout(() => { resolve(value()); }, 1000); }); }; return descriptor; } class MyClass { @lazy myMethod() { return "Hello, World!"; } } let myInstance = new MyClass(); myInstance.myMethod().then((result) => { console.log(result); // 输出 "Hello, World!",但需要等待1秒 }); ``` 在这个例子中,`@lazy`是一个装饰器,它被应用在`MyClass`的`myMethod`方法上。当我们调用`myMethod`时,装饰器会返回一个Promise,该Promise在1秒后解析为方法的实际返回值。 [2023-11-09 01:20:27 | AI问答 | 411点数解答]