跳到主要内容

装饰器

装饰器 是一个方法,可以注入到类、方法、属性、参数、对象上,扩展其功能。

装饰器解决了什么问题?

装饰器 解决在不修改原来类、方法、属性参数的时候为其添加额外的功能。在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":"