typescript - TS2554:预期 X 参数,但得到 Y w/函数重载
问题描述
首先,我的功能:
function randIntIncl(max: number): number;
function randIntIncl(min: number, max?: number): number {
if(max === undefined) {
max = min;
min = 0;
}
return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
}
(信用MDN)
像这样调用:
randIntIncl(1,9999)
我得到错误:
TS2554:预期 1 个参数,但得到 2 个。
我猜TypeScript 匹配第一个重载,然后出错。我不明白为什么它不尝试第二次重载?9999
显然是一个数字,所以它应该匹配,不是吗?
我可以简单地省略第一个重载,一切都会很好,因为max
无论如何我都是可选的,但我把重载放在那里是为了文档的目的。当使用一个 arg 调用时,该 arg 是第二个重载所暗示的最大值而不是最小值。
所以我的问题是:
- 有没有办法使这项工作?我做错什么了吗?
- 还是这是“按设计”,我根本不应该创建模棱两可的重载?
解决方案
当您有重载签名时,实际函数定义的签名是“实现签名”,它不算作重载签名。如果你想让它成为一个重载签名,你必须写两次。见手册。
推荐阅读
- c++ - 为什么这些范围之外的字符也会被输出文件中的加法/减法改变?
- python - 需要从与用户表相关的日期表中获取值
- visual-studio - VS2019安装SQL Server组件查看网页时出现err_connection_reset
- docker - GKE - 在运行时绕过 Pod LoadBalancer(Pod 的外部 IP)到 Pod 的容器的 IP 以用于 WebSocket 目的
- epub - 在 epubcheck 中验证 epub 时出错,它说这个
- python - 如何检查 URL 是否包含某些内容
- java - Hibernate 和 MySQL:@CreationTimestamp 注释的 Date 属性在保存新实体时抛出 ConstraintViolationException
- flutter - 在 showModalBottomSheet 外部单击时,如何控制传递给 Navigator.pop() 的内容?
- matlab - 在循环matlab外的while循环上操作
- android - Android 版 Google Chrome 上的字体大小显示问题