typescript - 打字稿:带有可选参数的重载:“重载签名与函数实现不兼容。”
问题描述
我一直在尝试重载(最初尝试在打字稿中实现这个基本代理示例,没有像禁用一行类型检查这样的恶作剧,如果你们中的任何人已经解决了,请随意扰乱我,我已经学到了很多东西并且它得到了烦人,我似乎无法解决它)。
我在实验时遇到了一个问题。这是我的代码:
// "Overload signature is not compatible with function implementation." on first (in code) declaration
function strOrObj (samePar:object, obj:object):object|undefined;
function strOrObj (samePar:object, num:number):number|undefined;
function strOrObj (samePar:object, num?:number, obj?:object):object|number|undefined{
console.log("obj="+obj, "num="+num);
return obj? obj: num;
}
我必须undefined
在实现上添加,因为编译器在查看实现时认为可能需要它。它没有要求我将其添加到覆盖中,但无论如何我还是做了实验。但是当我在实现中添加类型声明时,我得到了错误Overload signature is not compatible with function implementation.
。
我编译它的唯一方法是将实现声明中的任何参数声明为any
,但这样它只会将每个给定类型填充到第一个可选参数中(num
在这种情况下)。
所以问题是,这里有什么问题?如果您不确定是否会使用第一个参数,或者这可能是问题所在(这可能是因为 JS 实现的原因),是否有可能拥有多个可选参数?
抱歉,如果这是重复的,我能找到的唯一似乎适用的是 Github 上的问题,但修复似乎已合并到发布代码中。
解决方案
Typescript 允许您定义多个重载,但在实现中区分它们是您的工作,这就是实现签名必须与所有重载兼容的原因
function strOrObj (samePar:object, obj:object):object|undefined;
function strOrObj (samePar:object, num:number):number|undefined;
function strOrObj (samePar:object, numObj:number| object):object|number|undefined{
if (typeof numObj === 'number') {
return samePar
} else {
numObj
}
}
推荐阅读
- cloud-foundry - CF Bosh Director 多数据中心高可用性
- python - 如何避免在 Python 中使用 Excel 中的“全部刷新”选择文件
- python - scrapy 不适用于 youtube 搜索查询?返回 404
- angular - 将结果添加到已经订阅的现有 observable
- javascript - 在另一个文件中获取变量
- sockets - 在 Windows 浏览器和 Linux 服务器之间打开套接字
- c++ - 具有多个键比较的 c++ 映射
- python - 检查所有子列表中存在哪些项目
- react-admin - 有没有办法在 SelectInput 和 TextInput 等输入组件中禁用 InputLabel?
- html - Bootstrap 4 mr-auto 无法正常工作