【TypeScript】引数が違うメソッド同士をオーバーロード

TOC

TypeScriptで、次のようなオーバーロードをしたかったです。

1
2
3
4
5
6
7
8
9
10
function test(num: number, x: number, y: number): void; // 1
function test(num: number, pos: number[]): void; // 2

function test(num: number, pos?: number[], x?:number, y?: number): void {
if (typeof x !== "undefined") {
// 1のとき
} else if (typeof pos !== "undefined") {
// 2のとき
}
}

しかし、エラーが出ました。
次のようにすればできます。

1
2
3
4
5
6
7
8
9
10
function test(num: number, x: number, y: number): void; // 1
function test(num: number, x: number[]): void; // 2

function test(num: number, x: any, y?: number): void {
if (typeof x === "number") {
// 1のとき
} else if (x instanceof Array) {
// 2のとき
}
}

引数を共通にすればできます。ちょっと違和感はありますが・・