当前位置: 首页 > news >正文

nestjs 装饰器

1、装饰器定义

装饰器是一种特殊的类型声明,它可以附加在类、方法、属性、参数上边

需开启tsconfig.json中 "experimentalDecorators":true

生成tsconfig.json文件

tsc -init

2、类装饰器

// 类装饰器 主要是通过@符号添加装饰器
// 装饰器会自动把class的构造函数传入到装饰器的第一个参数target
// 然后通过prototype可以自定义添加属性和方法function decotators (target:any) {target.prototype.name = 'test';
}@decotators
class Test {constructor () {}
}const test: any = new Test();console.log(test.name);

2、属性装饰器

// 属性装饰器
// 使用@符号给属性添加装饰器
// 它会返回两个参数  1、原型对象  2、属性的名称const currency: PropertyDecorator = (target: any, key: string | symbol) => {console.log(target, key);
}class Test {@currencypublic name: stringconstructor () {this.name = 'test';}getName () {return this.name;}
}const test = new Test();

3、参数装饰器

// 参数装饰器
// 使用@符号给属性添加装饰器
// 它会返回三个参数 1、原型对象 2、方法的名称 3、参数的位置从0开始const currency: ParameterDecorator = (target: any, key: string | symbol, index: number) => {console.log(target, key, index);
}class Test {public name: stringconstructor () {this.name = '';}getName (name: string, @currency age: number) {return this.name;}
}

4、方法装饰器

// 方法装饰器
// 它会返回两个参数 1、原型对象  2、方法的名称
// 属性描述符   可写:writable   可枚举:enumerable   可配置:configurableconst currency: MethodDecorator = (target: any, key: string | symbol, descriptor) => {console.log(target, key, descriptor);
}class Test {public name: stringconstructor() {this.name = ''}@currencygetName(name:string, age:number){return this.name;}
}

5、自定义装饰器

添加配置、安装依赖

npm init -y tsc -init npm install axios -S
import axios from "axios";// 定义装饰器
const Get = (url: string): MethodDecorator => {return (target, key, descriptor: PropertyDescriptor) => {const fnc = descriptor.value;axios.get(url).then(res => {fnc(res, { status: 200 })}).catch(e => {fnc (e, { status: 500 })})}
}// 定义控制器
class Controller {constructor(){}@Get('https://api.apiopen.top/api/getHaoKanVideo?page=0&size=10')getList (res: any, status: any){console.log(res.data.result.list, status);}
}

http://www.lryc.cn/news/283533.html

相关文章:

  • 一款开源且不限制大小可以设置过期时间的支持分享的的开源文件共享系统picoshare 部署教程
  • eBPF运行时安全
  • Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等
  • AutoEventWireup详解
  • SAP ABAP 自定义流水号 编号范围
  • 安卓、ios系统详解
  • 含并行连结的网络(GoogLeNet)
  • 计算机网络(第六版)复习提纲3
  • 怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准
  • GORM 介绍及快速入门
  • Scrcpy:掌握你的Android设备
  • [9, 8, 7, 6][1,2] = ?
  • docker部署Jira+配置MySQL8数据库
  • YOLOv5全网独家首发:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测实现暴力涨点
  • HTML中常用标签--详解
  • Vue实现字符串首字母大写、翻转字符串、获取用户选定的文本
  • 基于springboot+vue的旅游网站系统(前后端分离)
  • GB/T28181-2022之图像抓拍规范解读和设计实现
  • 阿赵UE学习笔记——10、Blender材质和绘制网格体
  • 数据结构--串
  • RabbitMQ交换机(3)-Topic
  • 前端密钥怎么存储,以及临时存储一些数据,如何存储才最安全?
  • 第16章_网络编程拓展练习(TCP编程,UDP编程)
  • 深入Docker5:安装nginx部署完整项目
  • HBASE学习四:常用命令汇总梳理(包括数据库、zk、hdfs相关操作与配置)
  • Android平台RTSP|RTMP播放端实时快照保存JPG还是PNG?
  • 【人工智能】之深入了解嵌入模型中的 Token:NLP 中的语义之旅(1)
  • UML-实现图(组件图和部署图)
  • 苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能
  • postman后端测试时invalid token报错+token失效报错解决方案