Javascript 返回类型中的TypeScript函数重载问题

Javascript 返回类型中的TypeScript函数重载问题,javascript,typescript,types,return,Javascript,Typescript,Types,Return,您能解释一下为什么函数funcOverloadingFail在TypeScript语法中不起作用吗? 以下示例中使用了函数重载 funcOverloading和funcOverloadingFail函数返回相同的类型(字符串和布尔值), 但要用不同的方法来做 function funcOverloading(member: number): boolean; function funcOverloading(member: string): string; function funcOverlo

您能解释一下为什么函数
funcOverloadingFail
在TypeScript语法中不起作用吗? 以下示例中使用了函数重载

funcOverloading
funcOverloadingFail
函数返回相同的类型(字符串和布尔值), 但要用不同的方法来做

function funcOverloading(member: number): boolean;
function funcOverloading(member: string): string;
function funcOverloading(member: number | string) {
  if (typeof member === 'number') {
    return member > 3;
  } else { 
    return member;
  }
}


function funcOverloadingFail(member: number): boolean;
function funcOverloadingFail(member: string): string;
function funcOverloadingFail(member: number | string) {
  if (typeof member === 'number') {
    return true;  // Error here
  } else { 
    return "3";  // Error here
  }
}
另一方面,TypeScript允许在没有函数重载的情况下执行相同的操作

function funcBoolean(member: number): boolean {
  return true;
}

function funcString(member: string): string {
  return "example";
}
但是,可以通过显式添加返回类型的并集来修复它:
string | boolean

function funcOverloadingFixed(member: number): boolean;
function funcOverloadingFixed(member: string): string;
function funcOverloadingFixed(member: number | string): string | boolean {
  if (typeof member === 'number') {
    return true;
  } else { 
    return "example";
  }
}

TypeScript

funcOverloadingFail的实现不会返回
布尔值
字符串
——它返回
真值
(其唯一值为
真值
)和
'3'
(其唯一值为
'3'
)的类型。因此,它比重载声明更窄,这是不允许的。我有同样的想法(我返回文本类型,例如“3”而不是字符串),但它适用于常规函数。