TypeScript中怎么使用Tuple Union声明函数重载
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍"TypeScript中怎么使用Tuple Union声明函数重载",在日常操作中,相信很多人在TypeScript中怎么使用Tuple Union声明函数重载问题上存在疑惑,小编查阅
千家信息网最后更新 2025年11月15日TypeScript中怎么使用Tuple Union声明函数重载
这篇文章主要介绍"TypeScript中怎么使用Tuple Union声明函数重载",在日常操作中,相信很多人在TypeScript中怎么使用Tuple Union声明函数重载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"TypeScript中怎么使用Tuple Union声明函数重载"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
问题:
TypeScript 中为函数添加多个签名后,依然需要添加相应的代码来判断并从不同的签名参数列表中获取对应的参数。过去常见的写法:
function refEventEmitter(event?: string): void;function refEventEmitter(event: string, callback: () => void): void;function refEventEmitter(callback: () => void): void;function refEventEmitter( eventOrCallback?: string | (() => void), callback?: () => void,): void { let event: string | undefined; if (typeof eventOrCallback === 'function') { callback = eventOrCallback; } else { event = eventOrCallback; } // ...}这个过程因为将原有参数列表直接按序号拍平,参数之间的类型关联需要人肉确保正确。
技巧:
这时我们可以通过使用tuple union 的参数类型,来无脑处理各种函数重载情况:
function refEventEmitter(event?: string): void;function refEventEmitter(event: string, callback: () => void): void;function refEventEmitter(callback: () => void): void;function refEventEmitter( ...args: | [event?: string] | [ event: string, callback: () => unknown, ] | [callback: () => unknown]): void { let [event, callback] = args.length === 2 ? args : typeof args[0] === 'function' ? [undefined, args[0]] : [args[0], undefined]; // ...}实际上,此时上方的签名列表也不再需要了:
function refEventEmitter( ...args: | [event?: string] | [ event: string, callback: () => unknown, ] | [callback: () => unknown]): void { let [event, callback] = args.length === 2 ? args : typeof args[0] === 'function' ? [undefined, args[0]] : [args[0], undefined]; // ...}这篇其实拖了有点久,在写的时候发现 TypeScript 已经内置了 "Convert overload list to single signature" 的重构选项,可以一键将重载列表变为参数 tuple union。
不过到这里其实还存在问题,TypeScript 中 typeof 条件判断不能对整个对象进行收窄,只能收窄被 typeof 到的某个元素、属性。上面的例子中,如果需要的不只是 args[0] 就会出现问题。
此时我们可以引入一个工具函数 isTypeOfProperty(object, key, type):
此时实现就变成了:
function refEventEmitter( ...args: | [event?: string] | [ event: string, callback: () => unknown, ] | [callback: () => unknown]): void { let [event, callback] = args.length === 2 ? args : isTypeOfProperty(args, 0, 'function') ? [undefined, args[0]] : [args[0], undefined]; // ...}到此,关于"TypeScript中怎么使用Tuple Union声明函数重载"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
函数
参数
问题
学习
更多
类型
帮助
不同
实用
接下来
之间
人肉
代码
例子
元素
写法
只是
可以通过
多个
实际
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
使用sql创建数据库文件
数据库grant
杭州fil服务器介绍
重生细胞玩哪个服务器
数据库新建实例命令
软件开发外包给别的公司怎么做账
数据库排序的目的
互联网科技玻璃门
汇丰银行西安软件开发中心
网络安全小提示音频
怎样把数据库表只读改为读取
互联网高科技例子
时序空间数据库
昕晨时间服务器
南通app软件开发哪家好
手机网络安全文化建设
linux文件导出到服务器
服务器抽出SN标签卡
怎样调用数据库
网络安全二级等保要求设备
视频播放器显示无法连接服务器
无法连接到服务器10087什么意思
软件开发外包需要岗位
福建服务器租用云主机
数据库柱状图数据选取代码
网络安全与管理本科
杭州服务器上门维修
什么是网络安全的特性
创建一个数据库需要说清哪些参数
数据库主建约束