私はいくつかのオーバーロードを持つ関数を持っています。TypeScriptのオーバーロードとオプションの引数
function foo(x: number, y: void): void;
function foo(x: number, y: number | string): number;
function foo(x: number, y: any) {
if (typeof y === "undefined") {
return;
}
return typeof y === "string"
? x/parseFloat(y)
: x/y;
}
代わりy
のためのオプションの引数を使用して、私は特に、戻り値を指定するvoid
を使用しています。意図するユースケースには、undefined
を第2引数として呼び出したユースケースが含まれます。別の関数で
が、私はそうのようにそれを呼び出します。
function bar(x: number, y?: number | string) {
const f = foo(x, y);
// Some other stuff
}
これは、次のタイプのエラーが発生します
Argument of type 'string | number | undefined' is not assignable to parameter of type 'string | number'.
Type 'undefined' is not assignable to type 'string | number'.
私の理解では、foo
は、第二引数string | number | void
としてかかるだろうということでしたが、 bar
を呼び出すと、string
,number
、またはvoid
のいずれかが渡され、TypeScriptはfoo
'戻り値。
意図した効果を達成する正しい方法は何ですか?