前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >TypeScript系列教程十一《装饰器》 -- 参数装饰器

TypeScript系列教程十一《装饰器》 -- 参数装饰器

作者头像
星宇大前端
发布于 2022-05-06 09:21:24
发布于 2022-05-06 09:21:24
64200
代码可运行
举报
文章被收录于专栏:大宇笔记大宇笔记
运行总次数:0
代码可运行

系列教程

参数装饰器修饰函数参数,一般应用场景配合方法装饰器一起,达到检查参数的目的。

参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:

  • 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
  • 成员的名字。 -参数在函数参数列表中的索引。

下面通过例子具体查看。

代码示例

示例目的:

根绝参数器找到返回的值,然后利用方法装饰器返回处理后的结果。

代码思路

  1. 根据参数装饰器标识
  2. 通过reflect-metadata 将数据记载到方法元数据,然后传递到方法装饰器
  3. 方法装饰器调用原有方法返回值

代码实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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'})

打印结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TypeScript系列教程十一《装饰器》 -- 方法装饰器
方法装饰器在后端编程中见到是比较多的,路由、注入等场景都有大规模的应用。下面是开始学习TS的方法装饰器。
星宇大前端
2022/05/06
8330
TypeScript系列教程十一《装饰器》 -- 方法装饰器
TypeScript系列教程十一《装饰器》 -- reflect-metadata
reflect-metadata 拆成两个单词,reflect 反射和 metadata,通俗理解 利用反射的原理修改元数据。
星宇大前端
2022/05/06
2.3K0
TypeScript系列教程十一《装饰器》 -- reflect-metadata
TypeScript系列教程十一《装饰器》 -- 属性装饰器
属性装饰器和其他装饰器功能类似,其设计也是为了统一的、复用度更高的去监听,改变属性。
星宇大前端
2022/05/06
1.1K0
TypeScript系列教程十一《装饰器》 -- 属性装饰器
《现代Typescript高级教程》装饰器
在过去的几年中,JavaScript及其生态系统发生了快速的变化。其中,TypeScript已成为许多开发人员的首选语言。其主要优势在于其静态类型系统,它使我们可以在编译时捕获错误,而不是在运行时。除此之外,TypeScript还为我们提供了许多ES6+特性以及一些其他的独有特性,例如枚举、命名空间和装饰器。
linwu
2023/07/27
1980
2020的最后一天,不妨了解下装饰器
举一个非常常见的需求。假设我们有一个类Network,它有一个异步getList方法
ACK
2021/01/05
1K0
【Angular专题】 (3)装饰器decorator,一块语法糖
修饰器是ES7加入的新特性,Angular中进行了大量使用,有很多内置的修饰器,后端的同学一般称之为“注解”。修饰器的作用,实际上就是设计模式中常说的装饰者模式的一种实现,早在ES6开始,设计模式原生化就已经是非常明显的趋势了,无论是for..of..和Iterator接口的配合内化了迭代者模式,Proxy对象实现的代理模式等等,都可以看出Javascript逐渐走向标准化的趋势和决心。
大史不说话
2018/12/28
1.2K0
实际项目中如何更优雅的编写网络请求层逻辑
最近公司部分前端工程转 typeScript 的实践中,也尝试了 ts 的写法,诸如依赖注入、控制翻转、注解等。这些概念在 Java 等后端开发中应用可能更为广泛,但也不影响在前端领域的尝鲜。最终的写法如下;
zz_jesse
2021/07/12
5430
实际项目中如何更优雅的编写网络请求层逻辑
在 TypeScript 中使用 reflect-metadata 库实现反射
reflect-metadata 是一个用于在 TypeScript 中实现元数据反射的库。它允许你在类、方法、属性等上附加元数据,并在运行时通过反射机制访问这些元数据。
kongxx
2024/10/10
4310
TypeScript系列教程十一《装饰器》 -- 装饰器与继承
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
星宇大前端
2022/05/06
5700
什么才是一个让人舒服的js库
简述 封装一个js库其实没有想象中的那么困难,常见时间格式化,发个npm仓库,搞个cdn,引入就能正常使用。 随着诉求的复杂性,往往就不是我们想象的那么简单了,就算代码上面把功能封装得很全面依然会存在真正业务上面不能满足的场景。 真实场景 例如公司业务上面希望封装通用axios的请求库,同时给h5端,移动端,pc端,客户端使用。具体到各个场景下面就会出现问题,在客户端请求前后希望写入本地日志,其他端不做处理。 不使用通用封装,公用的能力又不想多处重写,那可维护性,通用性上面就不能得到保障。 使用封装库能力
吴文周
2022/03/09
4340
搭建node服务(四):Decorator装饰器
Decorator(装饰器)是ECMAScript中一种与class相关的语法,用于给对象在运行期间动态的增加功能。Node.js还不支持Decorator,可以使用Babel进行转换,也可以在TypeScript中使用Decorator。本示例则是基于TypeScript来介绍如何在node服务中使用Decorator。
宜信技术学院
2020/11/05
1.7K0
TS从装饰器到注解到元编程
先看一段代码 import {Controller, Path, GET, POST, PathParam, BodyParam} from 'iwinter' @Path('/api/orders') class OrdersController extends Controller { @GET @Path('/:name/:id', (ctx, next)=> ~~ctx.params.id > 20) getAllOrders(@PathParam('id') id: n
MrTreasure
2018/05/10
3K0
TypeScript装饰器
TypeScript从入门到实践专栏是博主在学习和工作过程中的总结,实用性非常强,内容会不断进行精进,欢迎订阅哦,学会TS不迷路。
不叫猫先生
2023/11/15
2160
TypeScript装饰器
如何用 Decorator 装饰你的 Typescript?
正在着手写 THE LAST TIME 系列的 Typescript 篇,而Decorator 一直是我个人看来一个非常不错的切面方案。所谓的切面方案就是我们常说的切面编程 AOP。一种编程思想,简单直白的解释就是,一种在运行时,动态的将代码切入到类的指定方法、指定位置上的编程思想就是 AOP。AOP 和我们熟悉的 OOP 一样,只是一个编程范式,AOP 没有说什么规定要使用什么代码协议,必须要用什么方式去实现,这只是一个范式。而 Decorator 也就是AOP 的一种形式。
Nealyang
2019/12/30
1.2K0
TS 设计模式05 - 装饰者模式
在 oop 中,继承是实现多态最简单的方案。同一类的对象会有不同表现时,我们基于此基类去写派生类即可。但有时候,过度使用继承会导致程序无法维护。比如说,人有一个展示自己外观的方法,穿上不同的衣服这个展现形式就不一样。一个人可以选择穿 T-shirt,裤子,裙子,外套等等,它的顺序和搭配是不固定的,如果使用继承,我们对每种组合都需要去定义一个类,比如穿裤子的人,穿裙子的人,穿裤子和裙子的人,先穿裤子再穿外套的人......这样会是我们的程序变得非常庞大而难以维护。 事实上,不管穿什么衣服,本质上仍然是人,衣服只是基于人类的装饰而已。装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
love丁酥酥
2020/09/01
1.3K0
TS 设计模式05 - 装饰者模式
在TypeScript中使用装饰器
Decorator装饰器是ES7的时候提案的特性,目前处于Stage 3候选阶段(2022年10月)。
luciozhang
2023/04/22
1.2K0
在TypeScript中使用装饰器
【TypeScript】TS进阶-装饰器(十一)
装饰器(Decorator)是一种特殊类型的声明,它能够被附加到类声明、方法、属性或参数上,装饰器的本身。其本身是一个函数,会在运行的时候被调用,被装饰的声明信息会作为参数传递给装饰器函数,当作形参。装饰器本质上主要是在操作原型对象,通过给原型对象 prototype添加一些方法和属性,来扩展类的功能。 装饰器主要分为类装饰器(接收1个参数)、属性装饰器(接收2个参数)、方法装饰器(接收3个参数、参数装饰器(接收3个参数),不同装饰器接收参数也不一同。另外TS内置了装饰器类型,我们直接用就好了。
can4hou6joeng4
2023/11/28
1.2K0
从java注解漫谈到typescript装饰器——注解与装饰
之前整理过《Java注解(批注)的基本原理》,在java里面,注解(Annotation)是油盐,对于JavaScript来说,犹如东方香料
周陆军博客
2023/05/07
1.1K0
TypeScript装饰器从入门到应用
最近两年TypesScript简称“Ts”越来越火了,而且还在持续高涨。相信在不久后的将来,它将会成为我们日常开发中不可缺少的部分。我这么说是有依据的,因为在前端最火的框架中就已经有两个都更好的在支持使用Ts编写代码了,相信已经在使用中的朋友已经尝到香味了。
吴佳
2022/09/26
5530
一文读懂 @Decorator 装饰器——理解 VS Code 源码的基础
作者:easonruan,腾讯 CSIG 前端开发工程师 1. 装饰器的样子 我们先来看看 Decorator 装饰器长什么样子,大家可能没在项目中用过 Decorator 装饰器,但多多少少会看过下面装饰器的写法: /* Nest.Js cats.controller.ts */ import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController {   @Get()  
腾讯技术工程官方号
2021/08/09
1.2K0
相关推荐
TypeScript系列教程十一《装饰器》 -- 方法装饰器
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文