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 升级你的许可证
如果你修改了你的许可证(例如为你的许可证增加了更多的用户),或者从 Cloud 中整合到你本地,你需要更新你的许可证. 希望更新你的额许可证: 进入 > 基本配置(General Config ...
- kafka架构浅显理解
Kafka的概念: 1. AMQP协议 Advanced Message Queuing Protocol (高级消息队列协议) The Advanced Message Queuing Protoc ...
- 各数据库连接maven配置
Derbydb driver maven dependency<dependency> <groupId>org.apache.derby</groupId> &l ...
- Python1 简介及安装、基础
Python介绍 Python是面向对象,高级语言,解释,动态和多用途编程语言.Python易于学习,而且功能强大,功能多样的脚本语言使其对应用程序开发具有吸引力. Python的语法和动态类型具有其 ...
- bzoj 3529
非常好的一道莫比乌斯反演题,对提升自己的能力有很大帮助. 首先我们分析一下题意:题意让我们求,其中 那么我们首先对后面的式子进行一下变形,变形过程详见https://blog.csdn.net/lle ...
- Python老男孩
1.可以自己编写模块,但注意:如果想要调用该模块,需要将该模块放到site-packages目录下,或将该模块放在执行程序的路径下. 2.pyc文件是什么? 集合: set 集合可以去重:做交集.并集 ...
- 深入理解 Vue Computed 计算属性
Computed 计算属性是 Vue 中常用的一个功能,我们今天来说一下他的执行过长 拿官网简单的例子来看一下: <div id="example"> <p> ...
- IDEA抛出No bean named 'cacheManager' available解决方法
(正确的,老师发我的) <?xml version="1.0" encoding="UTF-8"?><beans xmlns="ht ...
- HDU5950 Recursive sequence (矩阵快速幂)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- python 0007
#coding='utf-8'# import re import os def get_list(): list_file=[] for f in os.listdir(): if f.endswi ...