使用重载函数处理联合,该重载函数不能在单个重载内处理整个联合

问题描述

我创建了一个带有一个参数的重载函数,并试图在通过各种重载“完全覆盖”的联合中调用pass,如下所示:

function overloaded(id: number): number;
function overloaded(ids: number[]): boolean;
function overloaded(idOrIds: number | number[]): number | boolean {
  if (Array.isArray(idOrIds)) return 0;
  return false;
}

function caller(idOrIds: number | number[]) {
  return overloaded(idOrIds);
}

但是调用overloaded时出现以下错误:

TS2769:没有过载与该调用匹配。

重载1,共2个,'((id:number):void'),出现以下错误。类型'number |的参数number []'不可分配给'number'类型的参数。类型'number []'不能分配给类型'number'。
重载2之2,'((ids:number []):void')给出以下错误。类型'number |的参数number []'不可分配给'number []'类型的参数。不能将“数字”类型分配给“数字[]”类型。

TS似乎希望单个重载覆盖整个联合-我如何使我的重载正常工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)