nestjs 装饰器

发布时间:2024年01月15日

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 {
    @currency
    public name: string
    constructor () {
        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: string
    constructor () {
        this.name = '';
    }
    
    getName (name: string, @currency age: number) {
        return this.name;
    }
}

4、方法装饰器

// 方法装饰器
// 它会返回两个参数 1、原型对象  2、方法的名称
// 属性描述符   可写:writable   可枚举:enumerable   可配置:configurable

const currency: MethodDecorator = (target: any, key: string | symbol, descriptor) => {
    console.log(target, key, descriptor);
}

class Test {
    public name: string
    constructor() {
        this.name = ''
    }
    
    @currency
    getName(name:string, age:number){
        return this.name;
    }
}

文章来源:https://blog.csdn.net/qq_34870529/article/details/135599620
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。