扫码关注官方订阅号
我在官方文档中看到重载这一节,请问这里的重载是不是显得多余了这个是一般的实现这个是typescript为同一个函数提供多个函数类型定义
完全就是多了两行声明,看不出有什么好处来
闭关修行中......
重载本身是个很好的概念,在静态语言中应用非常广泛。
TypeScript 是想把 JavaScript 静态化,通过一些静态检查提前发现错误。不过 TypeScript 是 JavaScript 的超集,要兼容动态的 JavaScript,所以所谓的静态化都是形式上的。TypeScript 的重载就是其中一种。
注意到 TypeScript 非常强调接口的概念,所以这个问题就好理解了
function pickCard(x),这样的定义,就算有自动完成的参数提示,你明白它需要什么样的参数吗?
function pickCard(x)
但下面这样定义你就清楚了
function pickCard(x: {suit: string; card: number; }[]): number; function pickCard(x: number): {suit: string; card: number; };
这两个重载说明,你可以传入一个 suit,它把对应的编号(或ID)返回出来;也可以传入一个编号,把对应的 suit 返回出来。就这两种调用形式。
suit
而至于后面的 function pickCard(x): any,严格的说是 function pickCard(x: any): any,是具体的实现。也就是说,具体的实现还是动态实现的,需要在代码里去检查参数 x,并根据具体的情况返回。但这个实现是调用者写程序的时候,提示中不会显示出来的,提示中只会显示出来前面的重载申明。最终 tsc 编译成 javascript 的时候也会对调用的参数和返回值类型进行检查,以避免出现调用错误。
function pickCard(x): any
function pickCard(x: any): any
总结一下就是,TypeScript 的重载是为了给调用者看,方便调用者知道该怎么调用(同时 tsc 也会进行静态检查以避免错误的调用)。
有助于IDE的代码提示,以及返回值的类型约束
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
重载本身是个很好的概念,在静态语言中应用非常广泛。
TypeScript 是想把 JavaScript 静态化,通过一些静态检查提前发现错误。不过 TypeScript 是 JavaScript 的超集,要兼容动态的 JavaScript,所以所谓的静态化都是形式上的。TypeScript 的重载就是其中一种。
注意到 TypeScript 非常强调接口的概念,所以这个问题就好理解了
function pickCard(x),这样的定义,就算有自动完成的参数提示,你明白它需要什么样的参数吗?但下面这样定义你就清楚了
这两个重载说明,你可以传入一个
suit,它把对应的编号(或ID)返回出来;也可以传入一个编号,把对应的suit返回出来。就这两种调用形式。而至于后面的
function pickCard(x): any,严格的说是function pickCard(x: any): any,是具体的实现。也就是说,具体的实现还是动态实现的,需要在代码里去检查参数 x,并根据具体的情况返回。但这个实现是调用者写程序的时候,提示中不会显示出来的,提示中只会显示出来前面的重载申明。最终 tsc 编译成 javascript 的时候也会对调用的参数和返回值类型进行检查,以避免出现调用错误。总结一下就是,TypeScript 的重载是为了给调用者看,方便调用者知道该怎么调用(同时 tsc 也会进行静态检查以避免错误的调用)。
有助于IDE的代码提示,以及返回值的类型约束