TypeScriptでもオーバーロードがしたい!
Javaとかってオーバーロードがあって、複数のコンストラクタを記述できるじゃないスカ
Hoge.java
public class Hoge {
private int hogeee;
public Hoge() {
this.hogeee = 0;
}
public Hoge(int hogeee) {
this.hogeee = hogeee;
}
}
これ何気に好きなんでTypeScriptでも同じ感じにやりたい!!!しかも型安全に!!!
でもなぜかQiitaに記事無かったんで、思いついたやつなんとなく書き置きしておきますん。
可変長引数を使いましょう
可変長引数の型をいい感じにしてあげると型安全になります。
Hoge.ts
export default class Hoge {
private hogeee: number;
constructor(...params: [] | [number]) {
if (params.length === 0) {
this.hogeee = 0;
} else {
const [num] = params;
this.hogeee = num;
}
}
public get hoge() {
return this.hogeee;
}
}
index.ts
import Hoge from './Hoge';
const hoge = new Hoge();
const foo = new Hoge(3);
console.log(`hoge: ${hoge.hoge}`); // hoge: 0
console.log(`foo: ${foo.hoge}`); // foo: 3
[] | [number]
以外の引数を許してないので、new Hoge('foo')
だったり、new Hoge(4, 2)
だったりは全部エラーになってくれます。すげー