装饰器 Decorator
- 类装饰器 ClassDecorator
const Base:ClassDecorator = (target)=>{
target.prototype.name="新增属性"
}
@Base()
class Http(){
}
- 装饰器工程(函数柯里化)
const Base= (params:string)=>{
const fn:ClassDecorator=(target)=>{
target.prototype.name="新增属性"+params
}
return fn
}
@Base("params")
class Http(){
}
const ht=new Http()
ht.fn();
- 方法装饰器 MethodsDecorator
const Get=(url:string)=>{
const fn:MethodsDecorator=(target,key,descriptor:PropertyDescriptor)=>{
descriptor.value(data)
}
return fn
}
class Http(){
@Get("/api/base")
getList(data:any){
}
}
- 参数装饰器
const Get=(url:string)=>{
const fn:MethodsDecorator=(target,key:any,descriptor:PropertyDescriptor)=>{
const k=Reflect.getMetadata("key",target)
descriptor.value(k?resp.data[key]:resp.data)
}
return fn
}
const Result = ()=>{
const fn:ParameterDecorator=(target,key,index)=>{
Reflect.defineMetaData("key","result",target)
}
return fn
}
class Http(){
@Get("/api/base")
getList( @Result() data:any){
console.log(data.list)
}
}
- 属性装饰器
const Desc:PropertyDescorator=(target,key)=>{
console.log(target,key)
}
class Http(){
@Desc()
desc:string
}