関数に同じオーバーロードの引数を渡すにはどうすればいいですか? 質問する

関数に同じオーバーロードの引数を渡すにはどうすればいいですか? 質問する

引数を別の関数に渡す関数を作成しようとしています。これらの関数は両方とも同じオーバーロードを持つ必要があります。

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) input.tsx(4, 10): この実装に対して呼び出しは成功しますが、オーバーロードの実装シグネチャは外部からは見えません。

遊び場

ベストアンサー1

関数を関数passの型として宣言するだけで、original演算子、例

function original (a: number): boolean;
function original (a: string, b: string): boolean;
function original (): boolean {
  return true;
}

let pass: typeof original =  () => {
  return true;
};

pass(5);         // all good
pass('a', 'b');  // all good
pass(45, 'b');   // error here

遊び場はここ

おすすめ記事