javascript - 关于typescript重载的

查看:155
本文介绍了javascript - 关于typescript重载的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在官方文档中看到重载这一节,请问这里的重载是不是显得多余了
这个是一般的实现

这个是typescript为同一个函数提供多个函数类型定义

完全就是多了两行声明,看不出有什么好处来

解决方案

重载本身是个很好的概念,在静态语言中应用非常广泛。

TypeScript 是想把 JavaScript 静态化,通过一些静态检查提前发现错误。不过 TypeScript 是 JavaScript 的超集,要兼容动态的 JavaScript,所以所谓的静态化都是形式上的。TypeScript 的重载就是其中一种。

注意到 TypeScript 非常强调接口的概念,所以这个问题就好理解了

function pickCard(x),这样的定义,就算有自动完成的参数提示,你明白它需要什么样的参数吗?

但下面这样定义你就清楚了

function pickCard(x: {suit: string; card: number; }[]): number;
function pickCard(x: number): {suit: string; card: number; };

这两个重载说明,你可以传入一个 suit,它把对应的编号(或ID)返回出来;也可以传入一个编号,把对应的 suit 返回出来。就这两种调用形式。

而至于后面的 function pickCard(x): any,严格的说是 function pickCard(x: any): any,是具体的实现。也就是说,具体的实现还是动态实现的,需要在代码里去检查参数 x,并根据具体的情况返回。但这个实现是调用者写程序的时候,提示中不会显示出来的,提示中只会显示出来前面的重载申明。最终 tsc 编译成 javascript 的时候也会对调用的参数和返回值类型进行检查,以避免出现调用错误。

总结一下就是,TypeScript 的重载是为了给调用者看,方便调用者知道该怎么调用(同时 tsc 也会进行静态检查以避免错误的调用)。

这篇关于javascript - 关于typescript重载的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆