TypeScript中怎么使用Tuple Union声明函数重载
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍"TypeScript中怎么使用Tuple Union声明函数重载",在日常操作中,相信很多人在TypeScript中怎么使用Tuple Union声明函数重载问题上存在疑惑,小编查阅
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
温州有没有软件开发
数据库与应用技术是学什么
部队网络安全法
gpu渲染服务器软件开发
网络安全自查报告.doc
软件开发 求职 未来规划
观潮翻译软件开发
网络安全有害程序应急预案
网站怎么在数据库查看密码
美团高科技互联网
云服务器怎么提高安全性
网络安全法正式形式的时间是
网络安全绕过登陆密码的代码
佛山微商软件开发咨询
合肥新华三校招软件开发面试
数据库数据量比较大怎么优化
手机无法联系服务器请检查网络
通过代理服务器玩英雄联盟
网络安全实习生一般月收入
诺亚之心服务器连接失败
供应网络安全在经济方面的重要性
数据库中怎么加数字
宁海嵌入式软件开发外包
安徽电力卫星授时服务器
软件开发费是固定资产吗
网络安全扫描哪些端口
河北同方服务器
公司如何创建数据库
网络安全法怎么保护个人信息
安卓软件开发 题库