TypeScript 语言 装饰器的基础语法

TypeScript阿木 发布于 2025-05-28 5 次阅读


阿木博主一句话概括:深入浅出TypeScript【1】装饰器【2】:语法基础与实战应用

阿木博主为你简单介绍:
TypeScript装饰器是一种强大的特性,它允许开发者在不修改原有代码结构的情况下,对类、方法、属性等进行扩展和增强。本文将围绕TypeScript装饰器的基础语法展开,通过实例讲解其应用,帮助读者深入理解并掌握装饰器的使用。

一、
随着前端技术的发展,TypeScript作为一种静态类型语言,因其良好的类型系统和丰富的生态系统,被越来越多的开发者所青睐。装饰器作为TypeScript的一个高级特性,为开发者提供了更加灵活和强大的编程方式。本文将详细介绍TypeScript装饰器的基础语法,并通过实例展示其在实际开发中的应用。

二、装饰器概述
装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问符、属性或参数上。装饰器的目的是在不修改原有代码结构的情况下,对代码进行扩展和增强。

三、装饰器语法基础
1. 装饰器表达式【3】
装饰器表达式是装饰器函数【4】或类的一个引用。以下是一个装饰器表达式的例子:

typescript
function log(target: Function) {
console.log(target);
}

@log
class MyClass {
constructor() {
console.log('MyClass constructor called');
}
}

在上面的例子中,`log`函数是一个装饰器,它接收一个目标对象【5】`target`作为参数。`@log`语法是装饰器表达式,它将`log`函数应用到`MyClass`类上。

2. 装饰器函数
装饰器函数是一个接受目标对象参数的函数。以下是一个装饰器函数的例子:

typescript
function log(target: Function) {
console.log(target);
}

@log
class MyClass {
constructor() {
console.log('MyClass constructor called');
}
}

在这个例子中,`log`函数是一个装饰器函数,它接收`MyClass`类作为参数,并在控制台打印出来。

3. 装饰器类【6】
装饰器类是一个包含构造函数的类,它接收一个目标对象参数。以下是一个装饰器类的例子:

typescript
function log(target: Function) {
console.log(target);
}

@log
class MyClass {
constructor() {
console.log('MyClass constructor called');
}
}

在这个例子中,`log`是一个装饰器类,它包含一个构造函数,该构造函数接收`MyClass`类作为参数。

4. 装饰器参数【7】
装饰器可以接受参数,这些参数可以通过装饰器表达式传递。以下是一个带有参数的装饰器函数的例子:

typescript
function log(target: Function, propertyKey: string, descriptor: PropertyDescriptor) {
console.log(target);
console.log(propertyKey);
console.log(descriptor);
}

@log
class MyClass {
myMethod() {
console.log('MyClass myMethod called');
}
}

在这个例子中,`log`装饰器函数接收三个参数:目标对象`target`、属性键【8】`propertyKey`和属性描述符【9】`descriptor`。

四、装饰器应用实例
1. 类装饰器【10】
类装饰器可以用来修改类的行为。以下是一个类装饰器的例子:

typescript
function logClass(target: Function) {
target.prototype.log = function() {
console.log('Class method called');
};
}

@logClass
class MyClass {
constructor() {
console.log('MyClass constructor called');
}
}

const myClassInstance = new MyClass();
myClassInstance.log(); // 输出:Class method called

2. 方法装饰器【11】
方法装饰器可以用来修改或增强类的行为。以下是一个方法装饰器的例子:

typescript
function logMethod(target: Object, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;

descriptor.value = function(...args: any[]) {
console.log(`Method ${propertyKey} called with arguments:`, args);
return originalMethod.apply(this, args);
};

return descriptor;
}

@logMethod
class MyClass {
myMethod(a: number, b: number) {
return a + b;
}
}

const myClassInstance = new MyClass();
myClassInstance.myMethod(1, 2); // 输出:Method myMethod called with arguments: [1, 2]

3. 属性装饰器【12】
属性装饰器可以用来修改或增强类的属性。以下是一个属性装饰器的例子:

typescript
function logProperty(target: Object, propertyKey: string) {
Object.defineProperty(target, propertyKey, {
get: function() {
console.log(`Property ${propertyKey} accessed`);
return 'Property value';
},
set: function(value: string) {
console.log(`Property ${propertyKey} set to`, value);
}
});
}

@logProperty
class MyClass {
public myProperty: string;
}

const myClassInstance = new MyClass();
myClassInstance.myProperty = 'Hello';
console.log(myClassInstance.myProperty); // 输出:Property myProperty accessed

五、总结
TypeScript装饰器是一种强大的特性,它为开发者提供了灵活的扩展和增强代码的方式。本文通过介绍装饰器的基础语法和实例应用,帮助读者深入理解并掌握装饰器的使用。在实际开发中,装饰器可以用于日志记录、权限控制、数据验证等多种场景,极大地提高了代码的可维护性和可扩展性。