TypeScript 语言 装饰器的执行顺序

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


阿木博主一句话概括:TypeScript【1】 装饰器【2】执行顺序【3】解析与代码实践

阿木博主为你简单介绍:
TypeScript 装饰器是 TypeScript 中一种强大的特性,它允许开发者在不修改原有代码结构的情况下,对类、方法、属性等进行扩展。本文将深入探讨 TypeScript 装饰器的执行顺序,并通过实际代码示例【4】来展示如何控制装饰器的执行顺序。

一、
装饰器是 TypeScript 中的一种特殊声明,用于修饰类、方法、属性等。装饰器可以用来扩展或修改类的行为,是 TypeScript 的高级特性之一。在 TypeScript 中,装饰器分为类装饰器【5】、方法装饰器【6】、属性装饰器【7】和访问器装饰器【8】

二、装饰器执行顺序概述
在 TypeScript 中,装饰器的执行顺序如下:

1. 类装饰器
2. 属性装饰器
3. 方法装饰器
4. 访问器装饰器

需要注意的是,如果一个装饰器同时是属性装饰器和访问器装饰器,那么它们的执行顺序是先属性后访问器。

三、代码实践
以下是一个简单的示例,展示如何控制装饰器的执行顺序。

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

function logProperty(target: Object, propertyKey: string) {
console.log('Property decorator called');
}

function logMethod(target: Object, propertyKey: string, descriptor: PropertyDescriptor) {
console.log('Method decorator called');
}

function logAccessors(target: Object, propertyKey: string, descriptor: PropertyDescriptor) {
console.log('Accessors decorator called');
}

@logClass
class MyClass {
@logProperty
public myProperty: string;

@logMethod
public myMethod() {
console.log('Method executed');
}

@logAccessors
public get myGetter() {
return 'getter called';
}

public set mySetter(value: string) {
console.log('setter called with:', value);
}
}

const instance = new MyClass();
instance.myProperty = 'test';
instance.myMethod();
console.log(instance.myGetter);
instance.mySetter = 'setter value';

执行上述代码,输出结果如下:


Class decorator called
Property decorator called
Method decorator called
Accessors decorator called
Method executed
getter called
setter called with: setter value

从输出结果可以看出,装饰器的执行顺序是按照类装饰器、属性装饰器、方法装饰器、访问器装饰器的顺序执行的。

四、总结
本文深入探讨了 TypeScript 装饰器的执行顺序,并通过实际代码示例展示了如何控制装饰器的执行顺序。了解装饰器的执行顺序对于开发者来说非常重要,因为它可以帮助我们更好地利用装饰器这一特性,实现更灵活和强大的代码扩展。

在 TypeScript 中,装饰器的执行顺序是类装饰器、属性装饰器、方法装饰器、访问器装饰器。通过合理地使用装饰器,我们可以为类、方法、属性等添加额外的功能,提高代码的可读性和可维护性。

五、扩展阅读
1. TypeScript 官方文档:https://www.typescriptlang.org/docs/handbook/decorators.html
2. TypeScript 装饰器高级用法:https://www.typescriptlang.org/docs/handbook/advanced-typescript.htmldecorators
3. TypeScript 装饰器最佳实践:https://dev.to/bruceyuan/typescript-decorators-best-practices-2j3h

通过阅读以上资料,可以更深入地了解 TypeScript 装饰器的使用方法和技巧。