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);
}