↓↓↓
typeScript系列学习文章目录

装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为。

通俗的讲装饰器就是一个方法,可以注入到类、方法、属性参数上来扩展类、属性、方法、参数的功能。

常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器

装饰器的写法:普通装饰器(无法传参) 、 装饰器工厂(可传参)

注意:使用装饰器会报以下错误,点击快速修复或者手动在json文件里增加以下代码

"experimentalDecorators": true,

对修饰器的实验支持是一项将在将来版本中更改的功能。设置 "experimentalDecorators" 选项以删除此警告。

运行顺序:属性>方法>方法参数>类 如果有多个同样的装饰器,它会先执行后面的

类装饰器

类装饰器在类声明之前被声明(紧靠着类声明)。 类装饰器应用于类构造函数,可以用来监视,修改或替换类定义。

类装饰器:普通装饰器(无法传参)

function logClass(params:any){console.log(params)// 动态扩展属性egparams.prototype.name = "fur"//动态扩展方法params.prototype.run =function(){console.log("run")}
}
@logClass
class  Person { study(){console.log("study")}
}var p:any = new Person()
p.study()//study
console.log(p.name)//fur
p.run()//run

类装饰器:装饰器工厂(可传参)

function logClass(params:any){return function(target:any){target.prototype.name=params;}
}
@logClass('furfur')
class  Person { study(){console.log("study")}
}
var p:any = new Person()
p.study()//study
console.log(p.name)//furfur

属性装饰器

属性装饰器表达式会在运行时当作函数被调用,传入下列2个参数:

​ 1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。

​ 2、成员的名字。

function logProperty(params:any){return function(target:any,attr:any){target[attr]=params;console.log(attr)console.log(target)}
}class  Person {@logProperty("fur") name:string|undefined;constructor(){}study(){console.log("study")}
}var p:any = new Person()
p.study()//study
console.log(p.name)//fur

方法装饰器

它会被应用到方法的 属性描述符上,可以用来监视,修改或者替换方法定义。

方法装饰会在运行时传入下列3个参数:

​ 1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。

​ 2、成员的名字。

​ 3、成员的属性描述符

function get(params:any){return function(target:any,methodName:any,desc:any){console.log(methodName);//getDatatarget.apiUrl='fur';target.run=function(){console.log('run');}}
}class HttpClient{  public url:any |undefined;constructor(){}@get('http://www.fur.com')getData(){        }
}var http:any=new HttpClient();
console.log(http.apiUrl);//fur
http.run();//run

方法参数装饰器

方法参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:

​ 1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。

​ 2、参数的名字。

​ 3、参数在函数参数列表中的索引。

function logParams(params:any){return function(target:any,methodName:any,paramsIndex:any){console.log(params);//furconsole.log(target);//objectconsole.log(methodName);//getDataconsole.log(paramsIndex);//0target.apiUrl=params;}
}class HttpClient{  public url:any |undefined;constructor(){}           getData(@logParams('fur') uuid:any){               console.log(uuid);}}var http:any = new HttpClient();
http.getData("furfur");//furfur
console.log( http.apiUrl);//fur

↓↓↓
typeScript系列学习文章目录

三分钟快速了解typeScript的装饰器相关推荐

  1. 三分钟快速了解typeScript 类

    typeScript 类 类描述了所创建的对象共同的属性和方法. 类的定义 继承 类里面的修饰符 静态属性 静态方法 抽象类 继承 多态 类的定义 class person {name:string; ...

  2. 三分钟快速了解typeScript接口

    typeScript接口 属性类接口 函数类型接口 可索引接口 类类型接口 接口扩展 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通 ...

  3. 三分钟快速了解typeScript数据类型

    前言: TypeScript 是由微软开发的一款开源的编程语言. TypeScript 是 Javascript 的超级,遵循最新的 ES6.ES5 规范 TypeScript 扩展了JavaScri ...

  4. 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门

    概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...

  5. Angular2入门:TypeScript的装饰器

    Angular2入门:TypeScript的装饰器 转载于:https://www.cnblogs.com/lexiaofei/p/9215505.html

  6. 云小课 | 一个三分钟快速定制OCR应用的神器,要不?

    摘要:ModelArts Pro提供了文字识别套件,基于丰富的文字识别算法和行业知识积累,帮助客户快速构建满足不同业务场景需求的文字识别服务.三分钟即可快速定制OCR服务,实现多种版式图像的文字信息结 ...

  7. 调音台docker教程_威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程!...

    威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程! 2020-04-15 11:01:02 67点赞 529收藏 47评论 ...

  8. 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block

    文章目录 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block Block Inline Inline-block Block,Inline,Inline-B ...

  9. React 中 TypeScript 和装饰器及 Hooks

    概念 TypeScript 是强类型语言,相对于JavaScript 弱类型语言,它具有类型检测的功能,扩展了JavaScript 的语法. TS的安装与执行: //全局安装typescript np ...

最新文章

  1. 自动驾驶出租车可行性研究报告:2020年能成真吗?
  2. 分治习题--九章算法培训课第三章笔记
  3. libtorch demo
  4. jsp内置对象与el内置对象
  5. 用g++编译生成动态连接库*.so的方法及连接
  6. MEF实现设计上的“松耦合”(一)
  7. 一文总结GaussDB通信原理知识
  8. linux屏幕怎么放大_02|初始Linux——Windows与Linux区别
  9. finder怎么才能找到library
  10. 如何用 Python 从 0 开始创建一个区块链?
  11. SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例
  12. adams c语言,adams2013编译c语言用户子程序生成dll超详细教程讲解.docx
  13. Android 电话的国家代码
  14. 1362:家庭问题(family)
  15. 高斯公式_注解_高数
  16. IntelliJ IDEA 绝对好用快捷键
  17. (iphone铃声制作)i39 for mac破解版永久激活方法
  18. 【shell】How can I create a select menu in a shell script?
  19. PDF文件怎么在线拆分?教你在线拆分方法
  20. WAP中利用截取手机号码达到自动登入的一段源码(转)

热门文章

  1. requests使用代理IP
  2. LeetCode/LintCode 题解丨一周爆刷字符串:旋转字符数组
  3. Android短信数据库相关
  4. 微信怎么屏蔽他人的朋友圈?图文教学,1分钟学会
  5. 密码套件cipher suite
  6. 2019 中科院 JCR 推荐 期刊 列表 计算机部分
  7. 2022年常见遥感类期刊JCR分区与影响因子汇总
  8. 软件测试bug日志信息,软件测试bug收集策略 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  9. C#实现QQ扫码登录
  10. java如何创建一个文本框_如何创建绑定到对象的文本框