如何传入比较器_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的报…

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

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

机器学习必知的15大框架

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

句子录音打分代码参考

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

工具用途_见微知著,小工具大用途!

为什么同一个饮品&#xff0c;店家做的尝起来如此美味。拿到配方后自己做的不是甜了就是酸了呢&#xff1f;相信很多朋友都有这种疑惑。但真相往往就会在不经意间被忽视&#xff0c;很多初学者并没有老师傅那样的熟练手感&#xff0c;可以做到信手拈来的程度。当没有那些量勺&a…

带暂停功能的音频播放代码参考

1、页面来源&#xff1a;sentenceExercise07.jsp 2、页面效果 3、源代码 <% page language"java" pageEncoding"UTF-8" contentType"text/html;charsetUTF-8"%> <% include file"/common/taglibs.jsp"%> <% include f…

Yann LeCun 怒喷 Sophia:这就是彻头彻尾的骗局

来源&#xff1a;雷锋网&#xff08;leiphone-sz&#xff09;作者&#xff1a;杨晓凡在各种机器学习方法火热、神经网络加速芯片和生成式模型火热、研究人员们常常为优秀论文拍案叫绝的 2017 年中&#xff0c;普通大众视野中的热门人工智能成果除了 AlphaGo&#xff0c;还有一件…

ad16自动布线设置规则_AD16快捷方式和常规设置

1.快捷方式:快速修改丝印位置。选中元件 按快捷键A然后按P。Ti &#xff1a;差分等长TR &#xff1a;蛇形走线MG &#xff1a;修改铜皮多根走线(选中要走的几根线 按快捷键TTM 几根可以同时走线。PM)调整元件坐标移动(选中元件 按一下M 选择通过X、Y移动选择。)shiftG&#xff…

麦肯锡报告:传统车企正面临出行的数字化颠覆

来源&#xff1a;车云未来的个人出行情景将迎来一个巨大转变&#xff0c;更加倾向于颠覆性科技和其创新商业模式。毫无疑问&#xff0c;汽车产业正在面临颠覆。消费者行为上的巨大变化正在改变汽车行业的现状&#xff0c;尤其是因为人们更加注重了所有的车内体验&#xff0c;而…

win10触屏输入法_触摸屏笔记本Win10电脑的校准技巧

Microsoft的Surface系列设备旨在优化Windows 10触摸和笔输入功能。 但是&#xff0c;经过一段时间后&#xff0c;输入精度会下降。 此外&#xff0c;还有许多其他触摸式二合一笔记本电脑和来自其他厂商的混合设备。 并不是所有这些都在出厂时具有最佳的触摸输入精度校准。 这导…

大牛预测2018年深度学习走向:大批AI硬件初创将失败

来源&#xff1a;智东西导语&#xff1a;本文作者Carlos E. Perez是Intuition Machine公司的创始人&#xff0c;曾经编写《人工直觉与深度学习手册》&#xff08; Artificial Intuition and the Deep Learning Playbook&#xff09;&#xff0c;他将会在2018年3月1日至2日在阿姆…