乐闻世界logo
搜索文章和话题

TypeScript 中的装饰器是什么?

2 个月前提问
2 个月前修改
浏览次数12

1个答案

1

装饰器(Decorator)是TypeScript的一个特性,它提供了一种为类、方法、访问器、属性或参数添加注解和元编程的语法。它们是一种设计模式,可以用来修改或包装一个已有的类或类的成员。

在TypeScript中,装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问器、属性或参数上。装饰器使用@expression这种形式,其中expression必须计算为一个函数,它会在运行时被调用,被装饰的声明信息作为参数传入。

例如,一个简单的装饰器@sealed可以用来封闭一个类,阻止其他代码继承此类:

typescript
function sealed(constructor: Function) { Object.seal(constructor); Object.seal(constructor.prototype); } @sealed class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return "Hello, " + this.greeting; } }

在这个例子中,sealed装饰器会阻止其他任何代码继承Greeter类。当尝试继承这个类时,JavaScript会抛出错误。

装饰器也可以用来监视、修改或替换类成员的定义。例如,你可以使用装饰器来记录某个方法的调用情况:

typescript
function log(target: any, propertyName: string, descriptor: PropertyDescriptor) { const originalMethod = descriptor.value; descriptor.value = function(...args: any[]) { console.log(`Calling "${propertyName}" with`, args); let result = originalMethod.apply(this, args); console.log(`Result: ${result}`); return result; } return descriptor; } class Calculator { @log add(x: number, y: number) { return x + y; } } const calculator = new Calculator(); calculator.add(2, 3);

在这个例子中,log装饰器修改了add方法,使得每次调用add都会在控制台中记录调用的详细信息和结果。

总的来说,装饰器是TypeScript提供的一种强大的语法,用于增强和扩展类及其成员的行为,使得代码更加灵活和具有表现力。

2024年7月29日 13:34 回复

你的答案