//类装饰器
const myDecorator: ClassDecorator = (target: Function) => {
//target是类的实例
target.prototype.name = '添加的名字'
target.prototype.getName = (): {} => {
return { x: 200 }
}
}
//装饰器工厂,根据输入的参数,返回对应的类装饰器
const myDecoratorFactory = (type: string): ClassDecorator => {
switch (type) {
case 'player':
return (target: Function) => {
target.prototype.play = () => {
console.log('player')
}
}
case 'computer':
return (target: Function) => {
target.prototype.play = () => {
console.log('computer')
}
}
default:
return (target: Function) => {
target.prototype.play = () => {
console.log('默认')
}
}
}
}
function log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
// target 是类的原型对象
// propertyKey 是方法名
// descriptor 是方法的属性描述符
console.log(`Calling ${propertyKey} with`, target, descriptor)
}
@myDecorator
@myDecoratorFactory('player')
class Person {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
@log
test(a: string) {
console.log(a)
}
}
let tmp: any = new Person('张三', 18)
tmp.play()
console.log(tmp.getName())
typescript中类装饰器和方法装饰器用法极简示例
最新推荐文章于 2024-07-24 11:09:48 发布