TypeScript装饰器与元编程
以下是关于 TypeScript 装饰器与元编程 的全面梳理,涵盖核心概念、应用场景、进阶技巧及注意事项,帮助我们掌握这一高阶特性,提升代码灵活性与可维护性:
一、装饰器(Decorators)基础
1. 核心概念
- 定义:一种特殊声明,用于附加元数据或修改类、方法、属性、参数的行为。
- 语法:通过
@expression
形式应用,expression
必须返回一个函数。 - 类型:
- 类装饰器:修改类构造函数。
- 方法装饰器:拦截方法调用。
- 属性装饰器:修改属性访问。
- 参数装饰器:装饰方法参数。
- 访问器装饰器:装饰 getter/setter。
2. 基本使用
// 类装饰器
function LogClass(target: Function) {
console.log(`装饰类: ${
target.name}`);
}
@LogClass
class MyClass {
// 方法装饰器
@LogMethod
greet(@LogParam name: string) {
console.log(`Hello, ${
name}`);
}
// 属性装饰器
@LogProperty
age = 25;
}
// 装饰器工厂(带参数)
function LogFactory(message: string) {
return function (target: any) {
console.log(message);
};
}
@LogFactory('自定义消息')
class AnotherClass {
}
二、元编程(Metaprogramming)基础
1. 反射与元数据
reflect-metadata
库:提供反射 API,存储/读取元数据。import 'reflect-metadata'; // 定义元数据 Reflect.defineMetadata('key', 'value', MyClass); // 读取元数据 const value = Reflect