首页/ 学科题库/ TypeScript/ 装饰器专题
TypeScript 专题精讲

装饰器专题

1 篇文章 20 道配套习题

装饰器专题

专题说明

本专题涵盖TypeScript装饰器的核心知识,包括类装饰器、方法装饰器、属性装饰器、参数装饰器、访问器装饰器等各类装饰器的使用与实现原理,以及装饰器组合、装饰器工厂、元数据反射等进阶技巧。

学习目标

  1. 掌握五类装饰器(类/方法/访问器/属性/参数)的使用
  2. 理解装饰器的执行顺序与装饰器组合机制
  3. 能够使用装饰器实现AOP与依赖注入

学习建议

装饰器是实验性功能,需在tsconfig.json中启用experimentalDecorators。

配套习题(20 题)

参考答案在文末
判断题
1
判断题

访问器装饰器可以同时应用于 getter 和 setter,它们共享同一个属性描述符。

A

对

B

错

2
判断题

使用类装饰器扩展类后,原始类的实例化方式(new 操作符)不需要做任何改变。

A

对

B

错

3
判断题

属性装饰器应用于类的静态属性时,target 参数是类的构造函数。

A

对

B

错

4
判断题

属性装饰器接收参数描述符(PropertyDescriptor)作为第三个参数。

A

对

B

错

5
判断题

类装饰器接收的参数是类的构造函数,返回值可以是 void 或者一个新的构造函数。

A

对

B

错

6
判断题

方法装饰器只能接收三个参数:原型对象、方法名和方法的描述符。

A

对

B

错

7
判断题

当方法装饰器应用于静态方法时,target 参数是该类的构造函数而非原型对象。

A

对

B

错

8
判断题

访问器装饰器的参数签名与方法装饰器完全相同。

A

对

B

错

单选题
9
单选题

使用方法装饰器实现权限校验时,如果校验失败应该?

A

抛出异常阻止方法执行

B

返回 undefined 但不记录任何信息

C

返回 null 继续执行后续逻辑

D

静默跳过方法调用

10
单选题

使用访问器装饰器实现属性懒加载,正确的做法是?

A

在 descriptor.get 中检查缓存,未命中时计算并缓存

B

在 descriptor.set 中检查缓存

C

删除 descriptor.get 并直接赋值

D

在类的构造函数中初始化所有属性

11
单选题

使用方法装饰器实现日志记录时,正确的做法是?

A

直接修改原方法体添加 console.log

B

在 descriptor.value 中包装原方法,在调用前后记录日志

C

使用 Object.defineProperty 删除原方法

D

在类的构造函数中添加日志逻辑

12
单选题

使用访问器装饰器实现只读属性拦截,应该修改 descriptor 的哪个部分?

A

descriptor.writable = false

B

descriptor.set 设为 undefined 或抛出异常

C

descriptor.enumerable = false

D

descriptor.configurable = false

13
单选题

使用类装饰器为类添加静态方法,正确的实现方式是?

A

修改 constructor.prototype 添加方法

B

直接在构造函数上添加方法属性

C

使用 Object.defineProperty 在原型上定义

D

必须返回全新的类定义

14
单选题

关于类装饰器的执行时机,以下说法正确的是?

A

类装饰器在创建类实例时执行

B

类装饰器在类定义时被执行一次

C

类装饰器在每次调用类方法时执行

D

类装饰器在模块加载时每秒执行一次

15
单选题

使用属性装饰器实现字段校验,正确的实现思路是?

A

在装饰器中直接修改属性值

B

使用 Object.defineProperty 将属性替换为带校验的 getter/setter

C

在类的构造函数中重写所有属性

D

删除原始属性并添加新方法

16
单选题

属性装饰器常用于实现元数据注入,以下方式正确的是?

A

将元数据存储在 prototype 上的专属对象中

B

修改原始属性值来存储元数据

C

在全局变量中维护所有属性的元数据

D

使用 Reflect.defineProperty 定义新属性

多选题
17
多选题

以下哪些是方法装饰器的典型应用场景?

A

日志记录与性能监控

B

修改方法参数类型

C

权限校验与安全拦截

D

事务管理与错误重试

18
多选题

以下哪些场景适合使用类装饰器实现?

A

为类的所有实例添加共享方法

B

拦截类的构造函数调用

C

为类添加静态属性或方法

D

修改类实例的属性访问行为

19
多选题

以下哪些场景适合使用访问器装饰器实现?

A

属性值的格式化和验证

B

方法执行时间的统计

C

敏感数据访问的审计日志

D

属性变更的通知机制

20
多选题

以下哪些是属性装饰器的典型用途?

A

字段非空校验

B

方法执行性能监控

C

属性序列化/反序列化标记

D

ORM 实体列定义映射

参考答案
1.正确 2.错误 3.正确 4.错误 5.正确 6.正确 7.正确 8.正确 9.A 10.A 11.B 12.B 13.B 14.B 15.B 16.A 17.A;C;D 18.A;B;C 19.A;C;D 20.A;C;D
想在手机上刷这套专题的真题?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可解锁本专题全部配套练习与错题本。
了解产品 App
← 上一个专题 类型系统专题 下一个专题 → 高阶工具类型专题