Typescript 如何让函数用相同的重载传递参数?
我试图创建一个函数,将其参数传递给另一个函数。这两个函数都需要具有相同的重载Typescript 如何让函数用相同的重载传递参数?,typescript,overloading,Typescript,Overloading,我试图创建一个函数,将其参数传递给另一个函数。这两个函数都需要具有相同的重载 function original (a: number): boolean; function original (a: string, b: string): boolean; function original (a: number | string, b?: string): boolean { return true; } function pass (a: number): boolean; func
function original (a: number): boolean;
function original (a: string, b: string): boolean;
function original (a: number | string, b?: string): boolean {
return true;
}
function pass (a: number): boolean;
function pass (a: string, b: string): boolean;
function pass (a: number | string, b?: string): boolean {
return original(a, b);
}
这是行不通的
“string | number”类型的参数不能分配给“string”类型的参数
类型“number”不可分配给类型“string”。(2345)
tsx(4,10):调用本可以针对此实现成功,但重载的实现签名在外部不可见
向任何方向投射;)
或者使用命名元组作为参数(效果类似于重载)
你不能。您必须将
original
的内部类型作为重载公开
function pass (a: number | string, b?: string): boolean {
return original(a as any, b);
// or if you have strictNullChecks: true - then b should also be casted.
return original(a as any, b as any);
}
function original(...args: [a: string, b: string] | [a: number]): boolean {
return true;
}
function pass (...args: [a: string, b: string] | [a: number]): boolean {
return original(...args);
}