Date
Dateは多くの場面で必要とされつつも、JavaScriptのそれは少々扱いにくい。値のクローンは直感的ではないし、月はmonthIndex (0~11)を指定する。同値比較はタイムスタンプを比較しなければならない。値の変更は破壊的で、時刻は常にクライアントのロケールに依存する。
TC39では新しい日付管理オブジェクトのTemporalが提案されているが、個人的にはスマートフォンの普及とOSのアップデートをしないユーザーのおかげで、Polyfillなしに安全に使えるようになるまで10年はかかると考えている。そうなると現状はDateを便利に扱うための関数を用意するか、プロトタイプを拡張するしかなく、利便性をとれば拡張のほうが有利だ。
提案するメソッド
format(format: string): string
日時を要素ごとの指定子で整形して文字列として返却する。CやPythonにおける strftime() と同じインタフェースを期待している。"2025-01-01" のような文字列を得るために、毎回日時要素を取得して桁合わせするコードは書きたくない。
add(options: Object): Date
Dateの加算をする。date.add({ days: 10 }) のような使い方を想定していて、新しいインスタンスを返却する。date.setDate(date.getDate() + 10) のようなコードは直感的ではないので、これを隠蔽するためにも有用である。
static of(year, month, day, …): Date
DateコンストラクタはmonthIndexを受け取るが、これは長年人類を悩ませてきた。単純に month - 1 をDateコンストラクタに渡すだけだが、これだけでも間違いが減るのであれば価値がある。
Number
数値型にはいくつも定義したいものがあるが、ユースケースに依存するので、ここでは具体的に議論しない。JavaScriptの数値型にもあるように、JavaScriptの数値型には取扱いの上で課題があるので、これを解決するためのメソッドを追加定義することで、安全かつ見通しのよいコードが書けるようになると期待している。