装饰器: 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或者参数上,可以修改类的行为。
通俗来讲: 装饰器就是一个方法,可以注入到类,方法,属性参数上来扩展类,属性,方法,参数的功能。
常见的装饰器有: 类装饰器,属性装饰器,方法装饰器,参数装饰器
装饰器的写法: 普通装饰器(无法传参) 装饰器工厂(可传参)
类装饰器
类装饰器: 类装饰器在类声明之前被声明(紧靠着声明) 类装饰器应用于类构造函数,可以用来监视,修改或替换类定义,并传入一个参数
装饰器的执行顺序
属性>方法>方法参数>类 如果有多个同样的装饰器,它会优先执行后面的(从里到外的执行顺序)
1. 类装饰器
a. 普通装饰器(无法传参)
function logClass(params:any) { //params就是当前类 console.log(params)// [Function: HttpClient] params.prototype.apiUrl='动态扩展属性'; //扩展动态方法 params.prototype.run=function(){ console.log('我是一个run方法'); } } //调用装饰器用@ 普通装饰器无法传参 @logClass class HttpClient{ constructor() {} getData(){} } var http:any=new HttpClient(); console.log(http.apiUrl);//动态扩展属性 http.run();//我是一个run方法
b.装饰器工厂(可传参)
function logClass(params:string) { return function(target:any){ console.log(target);//把类 传参给 target.prototype.apiUrl=params; } } //调用装饰器用@ @logClass('www.baidu.com') class HttpClient{ constructor() {} getData(){} } var http:any=new HttpClient(); console.log(http.apiUrl);
c. 类装饰器 重载构造函数的例子
/* 类构造器表达式会在运行时当做函数被调用,类的沟站函数作为其唯一的参数。 如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明。 * */ function logClass(target:any){ console.log(target); return class extends target{ apiUrl:any='我是修改后的数据'; getData(){ this.apiUrl=this.apiUrl+'----'; console.log(this.apiUrl); } } } @logClass class HttpClient{ public apiUrl:string | undefined; constructor() { this.apiUrl='我是构造函数里面的apiUrl' } getData(){ console.log(this.apiUrl); } } var http=new HttpClient(); http.getData();//我是修改后的数据----
2. 属性装饰器
/* 属性装饰器表达式会在运行时,当做函数被调用,传入下列两个参数 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象 成员的名字 **/ function logProperty(params:any){ return function(target:any,attr:any){ console.log(target) //HttpClient { getData: [Function] } console.log(attr) //apiUrl target[attr]=params; } } @logClass('xxxxx') class HttpClient{ @logProperty('xxxsssss') public apiUrl:string | undefined; constructor() {} getData(){ console.log(this.apiUrl)//xxxsssss } } var http=new HttpClient(); http.getData();//我是修改后的数据----
3. 方法装饰器
/* 方法装饰器 它会接应应用到方法的属性的描述符上,可以用来监视,修改或者替换方法的定义 方法的装饰会在运行时传入下列3个参数 1.对于静态成员来说是类的构造函数,对于实例成员是类的原型对象 2.成员的名字 3.成员的属性描述符 */ function logMethod(params:any){ return function (target:any,methodName:any,desc:any) { console.log(target); //HttpClient { getData: [Function] } console.log(methodName); //getData console.log(desc); // { value: [Function],writable: true, enumerable: true,configurable: true } target.apiUrl='mssmmsmsm'; target.run=function () { console.log('run') } } } class HttpClient{ public url:any | undefined; constructor() {} @logMethod('xxxx') getData(){ console.log(this.url); } } var http:any=new HttpClient(); console.log(http.apiUrl); http.run(); //方法装饰器 修改getData方法 function logMethod(params: any) { console.log(params) return function (target: any, methodName: any, desc: any) { console.log(target); //HttpClient { getData: [Function] } console.log(methodName); //getData console.log(desc.value); //方法定义 //修改装饰器的方法,把装饰器方法里面传入的所有参赛改为string类型 //保存当前的方法 var oMethods=desc.value; //替换 desc.value=function (...args:any[]) { args=args.map((value)=>{ return String(value) }) console.log(args); //修改方法 对象冒充 oMethods.apply(this,args); } } } class HttpClient { public url: any | undefined; constructor() {} @logMethod('xxxx') getData(...args:any[]) { console.log(args) console.log('我是getData中的方法'); } } var http: any = new HttpClient(); http.getData('123','xxx');//[ '123', 'xxx' ]
4. 参数装饰器
/* 方法参数装饰器 参数装饰器表达式会在运行时当做函数直接调用,可以使用参数装饰器为类的原型增加一些元素数据,传入下列3个参数 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。 参数的名字 参数在函数参数列表的索引。 **/ function logParams(params:any) { return function (target: any, methodName: any, paramsIndex: any) { console.log(params) console.log(target); console.log(methodName); console.log(paramsIndex); target.apiUrl=params; } } class HttpClient { public url: any | undefined; constructor() {} getData(@logParams('uuiddddddddd') uuid: any) { console.log('我是getData里面的方法') console.log(uuid+'----'); } } //实例化 var http:any = new HttpClient(); http.getData(11111) console.log(http.apiUrl);
相关推荐
- Decorators:TypeScript的装饰器允许在运行时修改类的行为,常用于Vue的组件、属性和方法的元数据定义。 4. HTML5与CSS3 - HTML5的新特性:如语义化标签(header、footer、nav等)、离线存储(localStorage)、...
5. **装饰器**:装饰器是一种特殊类型的声明,可以被附加到类声明、方法、访问器、属性或参数上,用于在运行时修改或增强这些结构的行为。 6. **类型系统**:TypeScript的类型系统能够捕捉编译时的错误,避免了...
9. Decorators(装饰器):虽然不是贪吃蛇游戏的必需部分,但装饰器可以用来增强或修改类、属性和方法的行为,是TypeScript的一个强大特性。 10. 错误处理:TypeScript的异常处理机制可以帮助我们优雅地处理可能...
它支持ES6及以上的语法,如箭头函数、类和解构赋值,同时引入了接口、泛型、装饰器等概念,为大型项目提供了更强大的工具。 **二、类型** 类型是 TypeScript 的核心特性,它允许开发者声明变量、函数参数和返回值的...
9. **装饰器(Decorators)**: 装饰器是一种特殊类型的声明,可以被附加到类声明、方法、访问器、属性或参数上,用于修改类的行为或属性。 10. **异步编程**: TypeScript支持Promise和async/await语法,使得异步...
装饰器是一种元编程机制,可以在运行时修改或增强对象的属性和方法。它们通过`@expression`语法应用于类、属性、方法等,用于添加元数据或改变行为。 7. **模块(Modules)** TypeScript支持AMD和CommonJS模块...
通过 PA_typescript-lab-4 实验,你不仅能够熟悉 TypeScript 的语法和特性,还能提升实际项目中的应用能力。实践是最好的老师,通过解决实验室提供的挑战,你将更加熟练地掌握 TypeScript 这门强大的语言。
总的来说,“typescript例子-所有代码打包”提供了全面的TypeScript实践,覆盖了类型系统、接口、泛型、函数、类、模块和装饰器等多个方面。通过这些示例,你可以逐步掌握TypeScript的精髓,并将其应用到自己的项目...
综合以上信息,我们可以推测"typescript-test-2"项目可能包含一系列测试用例,涵盖了TypeScript的各种特性,例如类型检查、接口实现、泛型使用、装饰器应用等,通过这些测试来验证TypeScript代码的正确性、稳定性和...
7. **装饰器(Decorators)**:装饰器是一种元编程特性,允许在运行时修改类的行为或属性。它们以 `@decorator` 形式出现,常用于实现依赖注入或提供元数据。 8. **枚举(Enums)**:枚举是 TypeScript 中一种强大...
标题 "typescript-decorator-builder" 暗示我们即将探讨的是关于 TypeScript 中的装饰器(Decorator)及其构建机制。装饰器是一种特殊类型的声明,可以被附加到类声明、方法、访问器、属性或参数上。它们提供了一种...
4. 装饰器(Decorators):装饰器是元编程的一种形式,可以用来修改类的行为或属性。例如,可能会有一个装饰器用于验证上传照片的大小或格式。 5. 静态类型检查:TypeScript的强类型系统会在编译阶段进行类型检查,...
TypeScript则需要掌握其基本类型、接口、泛型、装饰器等概念。 在本教程中,你可能会接触到以下几个关键知识点: 1. **TypeScript基础知识**:学习如何声明变量的类型,理解基本类型(如string、number、boolean、...
- **装饰器(Decorators)**:允许元编程,用于修改类的行为或属性。 **二、从JavaScript迁移到TypeScript** 1. **代码转换**:将JavaScript代码逐步转换为TypeScript,可以使用`--allowJs`选项让TypeScript编译器...
尽管在编写本文时它不会对未知类发出警告,但该扩展程序提供的所有其他功能(悬停信息,颜色装饰器,更快的速度)都不能弥补它,因此,我强烈建议您使用它代替它。 有关如何使用twin.macro进行配置的详细信息,。 ...
1. **基础语法**:学习TypeScript的基本语法,包括变量声明(let和const)、数据类型(如字符串、数字、布尔值、数组、对象、null和undefined)、操作符、流程控制语句(如条件语句和循环)等。 2. **类型系统**:...
6. **装饰器(Decorators)**:装饰器是一种元编程机制,可以用来修改类的行为或属性。学习如何定义和使用装饰器,例如用于实现数据验证、日志记录等功能。 7. **类型推断(Type Inference)**:TypeScript可以自动...
7. **装饰器(Decorators)**:元编程工具,可以添加、修改或删除类的属性和方法。 8. **高级类型(包括联合类型、交叉类型、类型保护等)**:提供了更复杂的类型组合方式,以适应各种复杂场景。 9. **类型推断...
**装饰器的基本语法** 装饰器以`@`符号开头,后跟一个函数表达式。这个函数会在编译时被调用,其返回值通常是一个类、属性或方法的修饰器工厂。 ```typescript @decorator class MyClass {} ``` **类装饰器** 类...
TypeScript还支持枚举(Enums)、泛型(Generics)、装饰器(Decorators)和模块(Modules)等高级特性。枚举允许创建命名常量集合,而泛型则允许编写可重用的代码,这些代码可以处理多种类型的数据。装饰器提供了一...