装饰器专题
专题说明
本专题涵盖TypeScript装饰器的核心知识,包括类装饰器、方法装饰器、属性装饰器、参数装饰器、访问器装饰器等各类装饰器的使用与实现原理,以及装饰器组合、装饰器工厂、元数据反射等进阶技巧。
学习目标
- 掌握五类装饰器(类/方法/访问器/属性/参数)的使用
- 理解装饰器的执行顺序与装饰器组合机制
- 能够使用装饰器实现AOP与依赖注入
学习建议
装饰器是实验性功能,需在tsconfig.json中启用experimentalDecorators。
本专题涵盖TypeScript装饰器的核心知识,包括类装饰器、方法装饰器、属性装饰器、参数装饰器、访问器装饰器等各类装饰器的使用与实现原理,以及装饰器组合、装饰器工厂、元数据反射等进阶技巧。
装饰器是实验性功能,需在tsconfig.json中启用experimentalDecorators。
访问器装饰器可以同时应用于 getter 和 setter,它们共享同一个属性描述符。
使用类装饰器扩展类后,原始类的实例化方式(new 操作符)不需要做任何改变。
属性装饰器应用于类的静态属性时,target 参数是类的构造函数。
属性装饰器接收参数描述符(PropertyDescriptor)作为第三个参数。
类装饰器接收的参数是类的构造函数,返回值可以是 void 或者一个新的构造函数。
方法装饰器只能接收三个参数:原型对象、方法名和方法的描述符。
当方法装饰器应用于静态方法时,target 参数是该类的构造函数而非原型对象。
访问器装饰器的参数签名与方法装饰器完全相同。
使用方法装饰器实现权限校验时,如果校验失败应该?
使用访问器装饰器实现属性懒加载,正确的做法是?
使用方法装饰器实现日志记录时,正确的做法是?
使用访问器装饰器实现只读属性拦截,应该修改 descriptor 的哪个部分?
使用类装饰器为类添加静态方法,正确的实现方式是?
关于类装饰器的执行时机,以下说法正确的是?
使用属性装饰器实现字段校验,正确的实现思路是?
属性装饰器常用于实现元数据注入,以下方式正确的是?
以下哪些是方法装饰器的典型应用场景?
以下哪些场景适合使用类装饰器实现?
以下哪些场景适合使用访问器装饰器实现?
以下哪些是属性装饰器的典型用途?