系列教程
- TypeScript系列教程一《开篇》
- TypeScript系列教程二《安装起步》
- TypeScript系列教程三《基础类型》
- TypeScript系列教程四《扩展类型》
- TypeScript系列教程五《对象类型》》
- TypeScript系列教程六《泛型》
- TypeScript系列教程七《接口》
- TypeScript系列教程八《类》
- TypeScript系列教程九《高级类型》
- TypeScript系列教程九《类型转换》-- keyof和typeof 操作
- TypeScript系列教程九《类型转换》-- 索引访问类型
- TypeScript系列教程九《类型转换》-- 条件类型
- TypeScript系列教程九《类型转换》-- 映射类型
- TypeScript系列教程九《类型转换》-- 条件类型
- TypeScript系列教程九《类型转换》-- 模板文本类型
- TypeScript系列教程十《模块》
- TypeScript系列教程十一《装饰器》 – 装饰器与继承
- TypeScript系列教程十一《装饰器》 – 类装饰器
- TypeScript系列教程十一《装饰器》 – 方法装饰器
- TypeScript系列教程十一《装饰器》 – reflect-metadata
- TypeScript系列教程十一《装饰器》 – 属性装饰器
- TypeScript系列教程十一《装饰器》 – 参数装饰器
参数装饰器修饰函数参数,一般应用场景配合方法装饰器一起,达到检查参数的目的。
参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
- 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
- 成员的名字。 -参数在函数参数列表中的索引。
下面通过例子具体查看。
代码示例
示例目的:
根绝参数器找到返回的值,然后利用方法装饰器返回处理后的结果。
代码思路
- 根据参数装饰器标识
- 通过reflect-metadata 将数据记载到方法元数据,然后传递到方法装饰器
- 方法装饰器调用原有方法返回值
代码实现
代码语言:javascript复制import "reflect-metadata";
const response: ParameterDecorator = (
target: Object,
propertyKey: string | symbol,
parameterIndex: number
) => {
Reflect.defineMetadata("response", parameterIndex, target, propertyKey);
};
const get: (path: string) => MethodDecorator = (path) => {
return (
target: Object,
propertyKey: string | symbol,
descriptor: PropertyDescriptor
) => {
let originMethod = descriptor.value;
let index = Reflect.getMetadata("response", target,propertyKey);
descriptor.value = function () {
arguments[index] = {'data':'返回值'}
let arr = []
for (const eindex in arguments) {
if (Object.prototype.hasOwnProperty.call(arguments, eindex)) {
const element = arguments[eindex];
arr.push(element)
}
}
originMethod(...arr)
};
};
};
class HttpReq {
@get("/getAllData")
getAllData(request: {}, @response res?:{}) {
console.log(res);
}
}
let http = new HttpReq()
http.getAllData({'data':'requestBody'})