如何传入比较器_typescript专题(五) 装饰器

欢迎来到我专题文章【typescript】,更多干货内容持续分享中,敬请关注!

9582d55e49c46177cddb175414aa62c7.png

本章目标

  • 基于webpack4.x从0开始搭建ts的开发环境
  • ts中的装饰器的基本使用

基于webpack4.x从0开始搭建ts的开发环境

webpack4.x已经问世好久了,0配置是一大亮点,but,在配置ts的开发环境时,才明白这就只是一个噱头而已。下我们一步步的来搭建我们的项目吧

一、创建工程目录和基本目录

mkdir ts

cd ts

初始化项目目录后,我们需要初始化我们的项目配置文件package.json文件。我们在ts目录下运行

npm init -y

后会生成一个默认的package.json配置文件。

接下来,我们创建ts的配置文件,tsconfig.json,我们运行

tsc --init

即可,在package.json相同目录会生成一个tsconfig.json文件,这里面默认是对ts的基本配置。

两个配置文件完成了以后,我们创建一个src目录

mkdir src

cd src

这里创建了ts的工程目录,以及webpack4.x默认的目录src,在src中,我们创建一个index.ts文件,注意这里是.ts文件哦,它将将是我们的程序的主入口文件

二、安装依赖和基本配置

我们要编译ts,我们需要在当前目录下安装typescript 、ts-loader和webpack

cnpm install typescript ts-loader webpack -D

安装完成后,我们还不能直接运行webpack命令,因为webpack默认会去找src下的index.js文件为入口文件,而我们创建的是ts文件,并且我们需要手动配置我们的ts-loader

创建webpack.config.js文件。

手动指定我们的入口文件

entry : './src/index.ts'

同时,我们需要将.ts结尾的文件通过ts-loader来处理它。我们需要在module下配置ts的编译配置,如下:

410966732b88ca16ab3934ecfec99416.png

很简单的配置,不再过多赘述了

到这里,我们的开发环境就配置好了,接下来我们来打包看下效果

42392ae03fef967e53c97dfd8416b072.png

这是index.ts中的内容

ecb8be5e8db5a57ab1a410b541c2df10.gif

编译成功,然后通过node去执行了打包后的文件,环境配置完成!

ts中的装饰器的基本使用

环境配置完后以后,我们再来看看ts中的装饰器。先来看下什么是装饰器?

顾名思义,装饰器就是用来修饰其它的事物的。

在ts中,装饰器就是函数,它可以用来装饰类。类的属性,方法以及方法的参数等。这样说好像有点抽象,没关系,我先来举个栗子

162f789f6fb95df61aee50f043eea1d6.png

我们先来申明一个装饰器。

caa60cd032e292c19426360d8e182b44.gif

这里要注意的是ts中默认不支持装饰器的语法解析,我们需要手动更新其配置文件tsconfigs.json

我们需要将experimentalDecorators设置为true,默认被注释掉了,只需要将注释去掉即可。

申明了一个say的装饰器,然后我将它修饰在一个类上面,注意,我们通过 @+装饰器名 直接加在类的前面即可。最后在执行的时候,我们打印了装饰器中的第一个参数target。结果是[Function Person]

说明了,当前的装饰器中的第一个参数target 就是我们的要修饰的类对象。

一、装饰器传参和应用

要想让装饰器能够传参,我们在定义装饰器的时候,内部必须是返回一个函数。像这样

6f2586b17d9870995ef822c8dddc2f49.png

调用:

e0b28d94f9f48ed2a274bbcff718e789.png

注意,这里调用的时候我们传入了hello ts 参数,我们在装饰器函数内部可以接收到这个函数。传参的目的达到了。

我们在Person类中并没有定义name属性,我们接下来打印一下最终的结果

22ee2c33e028125c05f04b7840420eef.gif

从执行结果可以看出来,最终打印出来了 hello ts , 它是我们通过装饰器传入的,在装饰器内部,我们给类的原型对象上添加了一个name属性,并且赋值为我们传入的参数 。

也就是说:我们可以不改变类的内部代码逻辑,通过装饰器可能实现动态修改类的内部逻辑

同样的道理,我们也可以在装饰器中去重写类的方法成员

二、属性装饰器

和类的装饰器一样,通过函数的方式去申明,只不过我们需要将装饰器加在对应的属性上面

b07d837cfc3c1d7014f764ff273d4253.png

我们接下来打印一下这几个参数

f2073e0c20d861b16bb76624801778ea.png
  • params是我们动态传入的装饰器的参数
  • target是我们修饰的属性对象
  • attr是我们要修饰的属性名

最后我们可以通过

target[attr] = params;

来改变类的属性值

c60565b4c3d204436341d15bb5beac1f.gif

可以看到我们已经通过装饰器修改了类的属性。

总结:

  1. 如何从0-1配置webpack编译ts的项目
  2. ts中的使用装饰器需要修改默认配置
  3. 类装饰器和属性装饰器的基本用法和传参

这里是【畅哥聊技术】的typescript专题系列。更多内容持续更新中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『报告』IDC:2018年物联网产业10大预测

来源:T客汇编译概要:根据市场研究公司IDC的报告,2018年全球物联网支出总额将达到7720亿美元。新年新气象,2017年被称作物联网(IoT)元年,而2018年还将续写IoT的高歌猛进。根据市场研究公司IDC的报…

上传图片和音频到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <% include file"/pages/exercise/editExerciseFrame.jsp"%> <…

hbase获取表信息_HBase的读写和javaAPI的使用

一、hbase系统管理表hbase:namespace&#xff0c;记录了hbase中所有namespace的信息 ,当前系统下有哪些namespace信息scan hbase:namespacehbase:meta&#xff0c;记录了region信息scan hbase:meta二、读写思想client(get、scan)rowkey条件(1)由于rowkey是存储在region上的(2)判…

机器学习必知的15大框架

作者 | Devendra Desale译者 | Mags来源 | 云栖社区不管你是一个研究人员&#xff0c;还是开发者&#xff0c;亦或是管理者&#xff0c;想要使用机器学习&#xff0c;需要使用正确的工具来实现。本文介绍了当前最流行15个机器学习框架。机器学习工程师是开发产品和构建算法团队…

上传图片和音频到Server,再转存到DB

jsp页面 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <link rel"stylesheet" href"<c:url value/plugin/ztree-v3…

区分大小屏幕_第一个Python程序——在屏幕上输出文本

本节我将给大家介绍最简单、最常用的 Python 程序——在屏幕上输出一段文本&#xff0c;包括字符串和数字。Python 使用 print 函数在屏幕上输出一段文本&#xff0c;输出结束后会自动换行。在屏幕上输出字符串字符串就是多个字符的集合&#xff0c;由双引号" "或者单…

2018 年物联网发展五大趋势预测

来源&#xff1a;腾股创投作者 &#xff1a;Pramod Chandrayan物联网已经开始在所有行业的企业中走向主流。 到 2018 年底&#xff0c;物联网支出预计将增长 15&#xff05;&#xff0c;达到 7725 亿美元&#xff0c;毫无疑问&#xff0c;未来一年连接设备和企业物联网项目数量…

js中立即执行函数会预编译吗_JavaScript预编译过程

什么是预编译&#xff1f;当js代码执行时有三个步骤&#xff1a;1.语法分析&#xff0c;这个过程检查出基本的语法错误。2&#xff0c;预编译&#xff0c;为对象分配空间。3&#xff0c;解释执行&#xff0c;解释一行执行一行&#xff0c;一旦出错立即停止执行。预编译发生在代…

知识图谱火了,但你知道它的发展历史吗?|赠书5本

作者&#xff1a;尼克 编辑&#xff5c;Emily版式由AI前线整理知识图谱火了&#xff0c;但你知道它的发展历史吗&#xff1f;本文节选自《人工智能简史》第 3 章&#xff0c;从第一个专家系统 DENDRAL 到语义网再到谷歌的开源知识图谱&#xff0c;对知识图谱的发展历程进行了…

python使用selenium_如何在python中使用selenium的示例

最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这…

英特尔爆发史诗级芯片漏洞,Linux之父痛斥英特尔公司

来源&#xff1a;CEO来信概要&#xff1a;1月4日消息&#xff0c;英特尔处理器存在芯片级漏洞的消息仍在发酵&#xff0c;恐怕将会成为计算机行业发展史上最大的安全漏洞之一。1月4日消息&#xff0c;英特尔处理器存在芯片级漏洞的消息仍在发酵&#xff0c;恐怕将会成为计算机行…

曲线均匀分布_曲线篇:深刻理解B 样条曲线(下)

前两篇中讲解了贝塞尔曲线和B样条基础。FrancisZhao&#xff1a;曲线篇: 贝塞尔曲线​zhuanlan.zhihu.comFrancisZhao&#xff1a;曲线篇&#xff1a;深刻理解B 样条曲线&#xff08;上&#xff09;​zhuanlan.zhihu.com本文讲一下B样条的进阶clamped B样条由于我们常用的B样条…

JSON.parse()解析单引号错误的问题

1、当用JSON.parse()方法&#xff0c;解析从后台传来的json字符串&#xff0c;而且字符串中含有单引号(如Iam ....)&#xff0c;页面将出现如下异常 2、页面引起报错部分 3、解决办法&#xff1a;在后台将特殊字符转义 bookBlockVoListJSONString BaseStringUtils.getJsonFor…

python复杂非线性方程_非线性方程python入门——屠龙刀

感谢师兄提供的题图。(这图应该是p的&#xff0c;我找电视剧&#xff0c;没谢三哥这三个字。)早些年做科研的时候&#xff0c;其实就用倚天屠龙走天下&#xff0c;一个矩阵对角化&#xff0c;一个非线性方程求解。当时是研究的冷原子&#xff0c;算是比较新的方向&#xff0c;量…

Facebook人工智能实验室提出「全景分割」,实现实例分割和语义分割的统一

原文来源&#xff1a;arxiv作者&#xff1a;Alexander Kirillov、Kaiming He1、Ross Girshick、Carsten Rother、Piotr Dollar「雷克世界」编译&#xff1a;嗯~阿童木呀、KABUDA现如今&#xff0c;我们提出并研究了一种新的“全景分割”&#xff08;Panoramic segmentation&…

ajax工作中使用模板

<!-- 生成课件 --><action name"createCourseware" class"coursewareManagementAction" method"createCourseware"><result name"ajax" type"jsonmessage"><param name"message">message…

数学一年级应用题_一年级数学下册应用题大全(附带答案)

应用题可以说是小学数学中最为重要的内容&#xff0c;是培养学生数学思维及解题能力的重要途径&#xff0c;做好应用题掉小学生非常重要&#xff0c;职场达人网精选100道一年级数学下册应用题&#xff0c;并附带答案。1、原有29个球&#xff0c;借出8个&#xff0c;还剩多少个&…

art.dialog弹出框后再根据其内部iframe的大小调整大小

1、主页面&#xff0c;用来弹出弹出页面 //查看错误小练习$.exerciseClick function(rowId ){$.event.get().preventDefault();var tdScore $("#" rowId).find("[aria-describedbyhomeworkStudentListGrid_score]");if( parseInt(tdScore.html()) 100 …

lg空调代码大全解决_LG空调故障代码大全

LG空调故障代码大全LG空调故障代码&#xff1b;PS/PRNA系列&#xff1b;CO&#xff1b;室内进风热敏电阻故障。C1&#xff1b;室内盘管热敏电阻故障。C4&#xff0c;室外热敏电阻故障包括室外环温&#xff0c;室外盘管&#xff0c;压机回气。C5&#xff0c;室内&#xff0c;室外…

句子录音打分代码参考

1、页面名称:sentenceReadRecordDialogAnyone.jsp 2、页面效果 3、页面源码 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%><script la…