typeScriptのオーバーロードはメソッドのインターフェイス定義部分と、メソッドの実装部分を分けて書きます。
//オーバーロードメソッドのインターフェイス
interface InSam {
aa(val: number): Sam1
aa(val: string): Sam2
}
class Sam1 implements InSam {
//インターフェースのオーバーロードメソッド
aa(val: number): Sam1
aa(val: string): Sam2
//上記2つ(インターフェースのオーバーロードメソッド)の内容を実装
aa(val: number | string): InSam {
if (typeof val === 'number') {
return new Sam1
}
return new Sam2
}
}
class Sam2 implements InSam {
aa(val: number): Sam1
aa(val: string): Sam2
aa(val: number | string): InSam {
if (typeof val === 'string') {
return new Sam2
}
return new Sam1
}
}