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屋!