关于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相关推荐

  1. python args kwargs 理解_*args和**kwargs在python中的作用

    我发现PYTHON新手在理解*args和**kwargs这两个魔法变量的时候有些困难.他们到底是什么呢? 首先,我先告诉大家一件事情,完整地写*args和**kwargs是不必要的,我们可以只写*和* ...

  2. python进阶(小白也能看懂)——*args与**kwargs的使用

    python进阶(小白也能看懂)--*args与**kwargs的使用 第一篇 理解*args与**kwargs在定义函数时的作用 假设你写了一个函数multiply(函数定义在下面),专门用来处理两 ...

  3. Kubernetes的yaml文件中command的使用

    前面说了init容器initContainers,这主要是为应用容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写写command的用法. command就是将命令在创 ...

  4. Kubernetes的yaml文件中的command使用

    前面说了init容器initContainers,这主要是为容器做前期准备工作的,一般都会用到shell脚本,这就会用到command,这里写command的用法. command就是将命令在创建的容 ...

  5. php debug用什么意思,phpdebug_backtrace()函数是干什么的?

    定义和用法 PHP debug_backtrace() 函数生成一个 backtrace(回溯信息). 该函数返回一个关联数组.下面是可能返回的元素:名称类型描述 function字符串当前的函数名. ...

  6. Bugkuweb系列题记录

    web1 打开场景,按F12查看源代码 web2 打开是一个计算器,但是只能输入一个数字.打开源码修改长度 输入结果就得flag web3 $what=$_GET['what']; echo $wha ...

  7. WEB所有题目-BugkuCTF平台

    1.web2 这题查看源代码即可,在url前加上 view-source: .或者按F12也行. 2.计算器 这个输入框只能输入一位数字,把它改大即可.任何的前端限制都是不安全的.按F12, 用选区器 ...

  8. Python3.X subprocess、os.system/os.popen/os.spawn*、commands:与系统进行交互,如测试时常用的adb命令

    如需转载请注明出处. win10 64位.Python 3.6.3.Sublime Text 3. 一.首先明白一些概念: 1.操作系统(OS,operating system). 是管理和控制计算机 ...

  9. python进阶教程

    Python进阶中文教程 转自GitBookhttps://eastlakeside.gitbooks.io/interpy-zh/content/?q= 我仔细学习了该进阶教程,原著根据<In ...

最新文章

  1. 企业单点登录解决方案(CAS)之二安装要求
  2. 【Java】练习题:三角形法则
  3. 计算机区块链的杂志,计算机类 | SPE诚邀区块链专刊(CCF B类,IF:1.338)
  4. java多线程做一件事_关于Java的十件事
  5. e300氛围灯哪里调节_黑色的奔驰E300有了亚光膜的加持 一出场就惊艳四座
  6. 虚拟主机网站搬到服务器上,如何把网页文件放到云虚拟主机
  7. HttpClient 4.5.3 模拟登陆CSDN
  8. 方正字体库大全(129款) 官方免费版​
  9. 计算机视觉-1.2手写字体识别
  10. 深交所“区块链50指数”,成分股的成色几何?
  11. jeecms9自定义标签以及使用新创建的数据库表
  12. matlab中squareg,matlab中y=square(t,DUTY)的用法
  13. 多人协作共享画板——多人画板的bug及分析
  14. R语言绘制沈阳地铁线路图
  15. python做数据可视化视频_B站上的数据可视化视频是怎么做的,用到了什么技术和工具?...
  16. ARM学习(12)基于arm架构的嵌入式操作系统理解
  17. resize用法matlab,opencv的resize和matlab的imresize函数的计算
  18. Android开发新技术
  19. Flash组件按钮的使用详解
  20. 卡西欧计算机使用方法,卡西欧计算器使用教程

热门文章

  1. MicroPython开发板播放音乐教程
  2. C#编程(四十八)----------列表
  3. iOS中UIWebview中网页宽度自适应的问题
  4. 基于NFS实现lamp的负载均衡之二: 部署NFS服务器
  5. EF架构~LinqToEntity里实现left join的一对一与一对多
  6. 使用 HttpLib 来访问 Web 服务
  7. Flash ios 开发cookbook 下载(PDF)
  8. MySQL之权限索引学习整理
  9. wx import require的理解
  10. 网络协议入门(OSI七层和TCP/IC四层协议)