TypeScript 的装饰器有哪些?

网站建设4年前发布
26 0 0

20230306012053134fe1e93fdc42ce84f848950aa37d54848830213,大家好,我是前端西瓜哥。,JS 的装饰器还在提案中(提案了好久),还没进入正式标准,掌握半成品实在性价比不高。,但装饰器实在是太强了,TypeScript 还是基于第一版实现了自己的装饰器特性,并标明为实验性质,让大家能够早早地用上。,目前也不少知名的第三方库(比如 Nest.js)使用了 TS 的装饰器,还是有必要学习的。,TS 中实现的装饰器有:,在使用类装饰器前,你需要在 tsconfig.json 中启用实验性的装饰器配置:,装饰器其实是一个函数,需要在被类使用前声明。因为 类声明后立刻就会执行修饰器,所以如果没有提前声明,就会报错。,类装饰器是一个函数,它可以在 class 声明时拿到 class,然后对 class 进行一些操作。,给一个类应用类装饰器的方式是:在类名的上一行加上 @<装饰器名>。,可以看到上面代码中,Watermelon 类有个静态属性 defaultPrice,值为 9,表示默认西瓜只要 9 块钱。,太便宜了,于是我实现了个 changeDefaultPrice 装饰器,能够从函数参数中拿到类,并将其修改为 100 块。,有时候,我们希望可以修改为自定义价格。这时候我们可以使用 装饰器工厂函数。,所谓装饰器工厂函数,就是一个返回装饰器函数的函数。通过它,我们就能利用闭包注入变量。​,装饰器工厂函数不只可以用在类装饰器中,还可以用在其他类型的装饰器中。,方法装饰器可以接受的参数有:,上面代码用 changeMethod 方法装饰器重写了 Watermelon.prototype.say 方法。,访问器装饰器,对类的 get 或 set 方法进行装饰。,和方法装饰器类似,访问器装饰器获得的参数有:,上面代码将 price 的值翻倍了。,属性装饰器,顾名思义用于修饰类的属性。,属性修饰器接受的参数有:,参数装饰器用于装饰函数参数,用于类构造器和方法。,参数装饰器能获得的参数有:,参数装饰器的一个用途是可以做参数校验,将某个索引的位置保存起来,然后再利用方法装饰器拿到描述符 descriptor,对原方法做一层校验的封装。,总的看来,TS 装饰器可以在类上加一些标记,然后对应的装饰器就能拿到必要的信息(类的原型、方法名、描述符等),然后就可以做一些代理、记录信息的功能增强。,TS 装饰器最后编译成的 JS 会丢掉这些装饰器标记,本质其实是语法糖。,我是前端西瓜哥,欢迎关注我,学习更多前端知识。

© 版权声明

相关文章