Typescript 常见的几种函数重载方法详解与应用示例
所谓的重载,其实就是使用相同的函数名,传入不同数量的参数或不同类型的参数,以此创建出多个方法或产生不同结果。
1. 最常见的,也就是根据定义傻瓜式地判断参数类型与数量
- function showPerson (name, ...others) {
- console.log(name, others)
- }
- showPerson('tate', {age: 25, test: 'test str'})
2. 其次就是使用常规的重载签名
使用重载签名进行重载,好处在于可以对传入的参数进行限制,只有当签名存在对应类型或数量的参数时,才不会报错。
此处定义完重载签名之后,一定要有具体实现
- function showPerson (name: string): void;
- function showPerson (age: number): void;
- function showPerson (play: () => void): void;
- function showPerson (...args) {
- console.log(args)
- // 根据函数类型和数量作出不同的行为
- }
重载签名配合可选参数可以使重载变得更加灵活
- function showPerson (name:string, age?: number, play?: () => void): void;
- // 利用重载签名 对不同的缺省做相应的处理
- function showPerson (name, age, play) {
- // dosomething
- }
- showPerson('tate', 25)
3.利用特定重载签名做更加细致的重载处理
鄙人比较喜欢NBA,就拿NBA举例。比如说现在需要写一个函数,符合此函数规则的只有三个人: 姚明,科比和詹姆斯;只有当名字是姚明的时候,他才可以打中锋, 是科比的时候才能打后卫,是詹姆斯的时候才能打前锋,并且因为国内球员比较瘦弱,所以只有当姚明是25岁以上的时候,才能被归为合格的中锋(只是举个例子,不要太当真),那这个时候就用到特定重载签名了。
- function playBasketball (name: 'YaoMing', age: number): void;
- function playBasketball (name: 'Kobe', age?: number): void
- function playBasketball (name: 'James', age?: number): void;
- function playBasketball (name: string, age: number) {
- if (name === 'YaoMing' && age && age >= 25) {
- console.log('good Center')
- } else if (name === 'Kobe') {
- console.log('good guard')
- } else if (name === 'Jams') {
- console.log('good forward')
- } else {
- console.log('ordinary baskerball player')
- }
- }
- playBasketball('YaoMing', 25);
- playBasketball('Kobe');
4. 使用接口搭配重载签名或非重载签名
- interface BasketballPlayer {
- (name: 'YaoMing', age: number): void;
- (name: 'Kobe', age: number): void;
- (name: 'James', age: number): void;
- }
- let playBasketball: BasketballPlayer = function (name) {
- if (name === 'YaoMing') {
- // dosomething
- }
- }
使用接口配合函数的默认参数,可实现特定重载签名的效果:
- interface BasketballPlayer {
- (name: 'YaoMing', age: number): void;
- (name: 'Kobe', age: number): void;
- (name: 'James', age: number): void;
- }
- let playBasketball: BasketballPlayer = function (name = 'Yaoming', age: number) {
- if (age >= 25) {
- console.log('good center')
- }
- }
- let playBasketball2: BasketballPlayer = function (name = 'Kobe') {
- console.log('good guard')
- }
- let playBasketball3: BasketballPlayer = function (name = 'James') {
- console.log('good forward');
- }
此处其并非严格意义上的重载,但是却利用了重载的思想,并且灵活搭配了函数的默认参数。
TS在大型项目中带来的优势超乎我们的想象,其他各方面的分享将会持续进行,有兴趣的小伙伴可持续关注。
Typescript 常见的几种函数重载方法详解与应用示例的更多相关文章
- Php中常见的4种随机密码生成方法详解
使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...
- 【转】Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...
- laravel 框架配置404等异常页面的方法详解(代码示例)
本篇文章给大家带来的内容是关于laravel 框架配置404等异常页面的方法详解(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在Laravel中所有的异常都由Handl ...
- Python的hasattr() getattr() setattr() 函数使用方法详解
hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False.需要注意的是name要用括号括起来 1 ...
- PHPCMS联动菜单的调用函数get_linkage方法详解
v9联动菜单调用方法[注意此为内容页调用方法 {get_linkage($areaid,1,' >> ',1)} 显示效果: 湖北省 >> 武汉市 >> 汉阳区 [ ...
- java本地方法如何调用其他程序函数,方法详解2
Java调用本地方法(JNI浅谈) (2006-11-27 14:55:36) 转载▼ 分类: Java类文章 本人在项目开发实践中的总结和体会 前段时间公司 ...
- java本地方法如何调用其他程序函数,方法详解
JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许J ...
- Python的hasattr() getattr() setattr() 函数使用方法详解 (转)
来自:https://www.cnblogs.com/cenyu/p/5713686.html hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOO ...
- MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...
随机推荐
- Confluence 6 整合到其他数据库
这个文档描述了如何整合你的 Confluence 数据库从你已经存在的数据库上到其他的数据库.这个指南被用来指导你从使用评估数据库转移到使用生产数据库. 大数据量需要第三方的数据库整合工具. 本页面对 ...
- flask 中orm关系映射 sqlalchemy的查询
flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课 ...
- python并发编程之进程池,线程池,协程
需要注意一下不能无限的开进程,不能无限的开线程最常用的就是开进程池,开线程池.其中回调函数非常重要回调函数其实可以作为一种编程思想,谁好了谁就去掉 只要你用并发,就会有锁的问题,但是你不能一直去自己加 ...
- 基于Form组件实现的增删改和基于ModelForm实现的增删改
一.ModelForm的介绍 ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 lab ...
- laravel 统计数据
//根据format字符串格式化date值.下列修饰符可以被用在format字符串中: //%M 月名字(January……December) //%W 星期名字(Sunday……Saturday ...
- HTML&javaSkcript&CSS&jQuery&ajax(11)
1.localStorage 没有 时间的限制数据存储, sessionStorage 针对一个session的存储,首先检查浏览器是否支持对这两个的存储, ifI(type(Storage)!==& ...
- Python GUI界面编程
常用GUI框架 wxPython 安装wxPython pip install -U wxPython C:\Users> pip install -U wxPython Collecting ...
- Python函数之递归函数
递归函数的定义:在这个函数里再调用这个函数本身 最大递归深度默认是997或者998,python从内存角度做的限制 优点:代码变简单 缺点:占内存 一:推导年龄 问a的值是多少: a 比 b 小2,b ...
- IDM的Google商店插件
官方扩展链接:https://chrome.google.com/webstore/detail/idm-integration-module/ngpampappnmepgilojfohadhhmbh ...
- 关于浏览器对html, js,css的解析先后顺序的理解
1.首先要了解页面的结构(包含哪些元素?哪些计算机语言能够在页面中运行 ) (1)html 不仅可以包含文字,还可以包含图片.链接,甚至音乐.程序等非文字元素的标记语言 ...