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