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