在 TypeScript 中,装饰器是一种特殊类型的声明,它能够被附加到类声明、方法、访问符、属性或参数上。下面是一些常见的装饰器示例:
1. 类装饰器
类装饰器用于类声明之前,用来监视、修改或替换类定义。
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}`;
}
}
2. 方法装饰器
方法装饰器用于方法声明之前,用来监视、修改或替换方法定义。
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return `Hello, ${this.greeting}`;
}
}
3. 访问器装饰器
访问器装饰器用于访问器声明之前,用来监视、修改或替换访问器定义。
function configurable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.configurable = value;
};
}
class Person {
private _name: string;
constructor(name: string) {
this._name = name;
}
@configurable(false)
get name() {
return this._name;
}
set name(newName: string) {
this._name = newName;
}
}
4. 属性装饰器
属性装饰器用于属性声明之前,用来监视、修改或替换属性定义。
function readonly(target: any, propertyKey: string) {
Object.defineProperty(target, propertyKey, {
writable: false
});
}
class Person {
@readonly
name: string;
constructor(name: string) {
this.name = name;
}
}
5. 参数装饰器
参数装饰器用于参数声明之前,用来监视、修改或替换参数定义。
function logParameter(target: any, propertyKey: string, parameterIndex: number) {
const metadataKey = `__log_${propertyKey}_parameters`;
if (Array.isArray(target[metadataKey])) {
target[metadataKey].push(parameterIndex);
} else {
target[metadataKey] = [parameterIndex];
}
}
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet(@logParameter name: string) {
return `Hello, ${name}`;
}
}
这些示例展示了如何使用装饰器来增强和修改类及其成员。希望这些示例对你有帮助!
标签:name,示例,ts,greeting,constructor,target,装饰,string From: https://www.cnblogs.com/jocongmin/p/18595951