ts装饰器的一点实用场景

之前看typescript的时候,看到decorator(装饰器)的时候,觉得鸡肋,项目中好像没啥地方可以用到, 用到后面觉得其实还是 有点用处的,比如以下我说的一种情况

class model {
    private _nickName : string

   constructor(){
    //添加nickName消息实体
    //cs.addChangedMsg(this, "nickName")
    //.....
   }   
    
   @decoratorName
   set nickName(value){
        this._nickName = value;
        //发通知数据变更
        //cs.dispatchChangedMsg(this, "nickName", this._nickName)
    }
   
    get nickName(){.....}
} 

model的结构里,对于需要监听的属性变化,我们都会有一个消息实体对象的添加和属性变更发消息这两个步骤,本来如果不考虑提示,这里也可以用一个公共方法来完成这些操作,但如果那样的话,那也没必要用ts来写了。
回到正题,这里怎么用装饰器来比较优雅地完成这些步骤呢,毕竟对每个需要监听的属性一个个去注册, set的时候发送消息其实挺恶心的,这时候装饰器做起来就比较舒服了

基本它的作用就是在set 这类方法调用时,做一个逻辑的截取,这样对于一些具有共性的getterSetter逻辑时,只要靠装饰器在前面添加一句@xxxx,就可以插入一些逻辑,不管是执行前还是执行后,当你不要这些时可以随时删除一行就去掉相关逻辑了,还降低了耦合。
目前代码中值得我用装饰器的地方似乎就只有这里了,如果大家有其他地方对这些特性有比较好的实用场景的也分享一下吧。

你可以看看 https://github.com/search?l=JavaScript&q=decorator&type=Repositories&utf8=✓ ,有非常多的实现可供参考喔!
比如 https://github.com/jayphelps/core-decorators

1赞