如何理解 new (...args: any[]) => any
关于javascript:如何开始理解类型…args:any [])=> any
如何理解下面这段代码里的 new 操作?
/*** Checks if the value is an instance of the specified object.*/
isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any) {return targetTypeConstructor&& typeof targetTypeConstructor ==="function"&& object instanceof targetTypeConstructor;
}
我们逐步分解。
() => any
该函数没有输入参数,返回任意类型。
(…args: any[]) => any
…args: any[]使用的是Rest Parameters构造,该构造本质上表示可以提供any类型的任何数量的参数。因为存在数量未知的any参数,所以参数的类型是any的数组。
最后,把 new 关键字补上。
new (…args: any[]) => any
此处的new关键字指定可以将此函数视为类构造函数,并使用new关键字进行调用。
回到文章开头的函数:
该函数是一个可以接受返回类型any的任意数量的参数(类型为any的函数),并且可以用作带有new关键字的构造函数。
看一个该函数具体消费的例子:
function isInstance(object: any, targetTypeConstructor: new (...args: any[]) => any) {return targetTypeConstructor&& typeof targetTypeConstructor ==="function"&& object instanceof targetTypeConstructor;
}class Jerry{constructor(private name:string){this.name = name;}
}const jerry: Jerry = new Jerry('Jerry');console.log(isInstance(jerry, Jerry));
输出:true
如果把 new 关键字去掉,反而会报错:
Argument of type ‘typeof Jerry’ is not assignable to parameter of type ‘(…args: any[]) => any’.
Type ‘typeof Jerry’ provides no match for the signature ‘(…args: any[]): any’.
更多Jerry的原创文章,尽在:“汪子熙”:
如何理解 new (...args: any[]) => any相关推荐
- python args kwargs 理解_*args和**kwargs在python中的作用
我发现PYTHON新手在理解*args和**kwargs这两个魔法变量的时候有些困难.他们到底是什么呢? 首先,我先告诉大家一件事情,完整地写*args和**kwargs是不必要的,我们可以只写*和* ...
- python进阶(小白也能看懂)——*args与**kwargs的使用
python进阶(小白也能看懂)--*args与**kwargs的使用 第一篇 理解*args与**kwargs在定义函数时的作用 假设你写了一个函数multiply(函数定义在下面),专门用来处理两 ...
- Kubernetes的yaml文件中command的使用
前面说了init容器initContainers,这主要是为应用容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写写command的用法. command就是将命令在创 ...
- Kubernetes的yaml文件中的command使用
前面说了init容器initContainers,这主要是为容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写command的用法. command就是将命令在创建的容 ...
- php debug用什么意思,phpdebug_backtrace()函数是干什么的?
定义和用法 PHP debug_backtrace() 函数生成一个 backtrace(回溯信息). 该函数返回一个关联数组.下面是可能返回的元素:名称类型描述 function字符串当前的函数名. ...
- Bugkuweb系列题记录
web1 打开场景,按F12查看源代码 web2 打开是一个计算器,但是只能输入一个数字.打开源码修改长度 输入结果就得flag web3 $what=$_GET['what']; echo $wha ...
- WEB所有题目-BugkuCTF平台
1.web2 这题查看源代码即可,在url前加上 view-source: .或者按F12也行. 2.计算器 这个输入框只能输入一位数字,把它改大即可.任何的前端限制都是不安全的.按F12, 用选区器 ...
- Python3.X subprocess、os.system/os.popen/os.spawn*、commands:与系统进行交互,如测试时常用的adb命令
如需转载请注明出处. win10 64位.Python 3.6.3.Sublime Text 3. 一.首先明白一些概念: 1.操作系统(OS,operating system). 是管理和控制计算机 ...
- python进阶教程
Python进阶中文教程 转自GitBookhttps://eastlakeside.gitbooks.io/interpy-zh/content/?q= 我仔细学习了该进阶教程,原著根据<In ...
最新文章
- 企业单点登录解决方案(CAS)之二安装要求
- 【Java】练习题:三角形法则
- 计算机区块链的杂志,计算机类 | SPE诚邀区块链专刊(CCF B类,IF:1.338)
- java多线程做一件事_关于Java的十件事
- e300氛围灯哪里调节_黑色的奔驰E300有了亚光膜的加持 一出场就惊艳四座
- 虚拟主机网站搬到服务器上,如何把网页文件放到云虚拟主机
- HttpClient 4.5.3 模拟登陆CSDN
- 方正字体库大全(129款) 官方免费版​
- 计算机视觉-1.2手写字体识别
- 深交所“区块链50指数”,成分股的成色几何?
- jeecms9自定义标签以及使用新创建的数据库表
- matlab中squareg,matlab中y=square(t,DUTY)的用法
- 多人协作共享画板——多人画板的bug及分析
- R语言绘制沈阳地铁线路图
- python做数据可视化视频_B站上的数据可视化视频是怎么做的,用到了什么技术和工具?...
- ARM学习(12)基于arm架构的嵌入式操作系统理解
- resize用法matlab,opencv的resize和matlab的imresize函数的计算
- Android开发新技术
- Flash组件按钮的使用详解
- 卡西欧计算机使用方法,卡西欧计算器使用教程