《TypeScript实战指南》—2.3.5 重载
【摘要】 本节书摘来自华章计算机《TypeScript实战指南》一书中的第2章,第2.3.5节,作者是胡桓铭。
2.3.5 重载
重载是静态类型语言常见的一种能力,简单说,就是函数或者方法有相同的名称,但是参数列表不相同,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。
JavaScript本身是个动态类型语言,所以并没有原生支持的重载,通常情况下,我们通过如下方式实现类似重载的效果。还是用 padLeft 的例子:
function padLeft(value: string, padding: any) {
if (typeof padding === "number") {
return Array(padding + 1).join(" ") + value;
}
if (typeof padding === "string") {
return padding + value;
}
throw new Error(`Expected string or number, got '${padding}'.`);
}
padLeft("Hello world", 4); // " Hello world"
padLeft 需要根据传入的不同参数类型处理不同的逻辑。TypeScript 中的重载并不支持我们实现多个不同参数的 padLeft 函数,它的语法有一点点怪异,是如下这样的:
function padLeft(value: string, padding: number): string;
function padLeft(value: string, padding: string): string;
function padLeft(value: string, padding: any) {
if (typeof padding === "number") {
return Array(padding + 1).join(" ") + value;
}
if (typeof padding === "string") {
return padding + value;
}
throw new Error(`Expected string or number, got '${padding}'.`);
}
padLeft("Hello world", 4); // " Hello world"
// function padLeft(value: string, padding: number): void (+1 overload)
我们声明了多个不同的 padLeft 函数,最后在一个类型最宽泛的版本中去实现了它,这都是为了能在编译时和代码提示时获得最佳的体验。简洁度并不如联合声明。所以 TypeScript 中的重载使用率很低,大家更倾向于使用其他方式达到类似的效果,而不是直接使用它。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)