装饰器
装饰器 是一个方法,可以注入到类、方法、属性、参数、对象上,扩展其功能。
装饰器解决了什么问题?
装饰器 解决在不修改原来类、方法、属性参数的时候为其添加额外的功能。在Nestjs
中装饰器可以解决依赖注入的问题,有了依赖注入,能大大降低项目的耦合度,大大提升项目的可扩展性。
装饰器分类
类装饰器
-
不带参数写法
function ClassDecorator(targetClass:any){
let targetClassObj = new targetClass();
targetClassObj.say();
console.log(targetClass)
}
@ClassDecorator
class Person{
name:string;
age:number;
constructor(name:string,age:number){
this.name = name;
this.age = age;
}
say(){
console.log(this.name+'说话')
}
} -
带参数写法
function ClassDecorator(params:any) {
return function (targetClass: any) {
let targetClassObj = new targetClass(params);
targetClassObj.say();
console.log(targetClass)
}
}
@ClassDecorator('柏拉图')
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
say() {
console.log(this.name + '说话')
}
}
属性装饰器
方法装饰器
参数装饰器
元数据装饰器
元数据装饰器 在定义类或者类方法的时候,可以设置一些元数据,我们可以获取到在类与类方法上添加的元数据,需要引入reflect-metadata
第三方库,采用@Reflect.metadata
来实现。元数据指的是描述东西时用的数据,例如Reflect.metadata("importinfo","哈哈哈哈哈哈哈")
装饰器环境搭建
一、安装 concurrently 支持合并执行,同时运行多个script
命令
yarn add concurrently -S
二、tsconfig.json 文件修改如下:
--- 编译输入输出目录
"outDir":"./dist",
"rootDir":"./src"
--- 消除装饰器警告
"experimentalDecorators": true, // 支持普通装饰器
"emitDecoratorMetadata": true // 支持元数据装饰器
三、配置 package.json 文件脚本信息
"dev:build" : "tsc -w",
"dev:start":"