型のユニットテスト
課題
どんなプログラミング言語であれ、プログラムが複雑になるのであれば自動テストを書いてその処理の正当性を保証したいものです。TypeScriptの型システムプログラミングもそれは例外ではありません。そこで、実装した型が期待通りであるかは次のEquals<X, Y>を使って検証します。
定義
code:memo.ts
type Equals<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false;
この仕組みは筆者が発明したものではなく、mattmccutchen氏によって提案されていた内容です。
なお、#27024の起票者kgtkr氏は、起票前にQiitaにて日本語の記事を提供くださっています。
解説
別解
型をテストする際はexpect-typeやtsdなどの専用のライブラリを使うと便利です
Vitestでは最初からexpect-typeが組み込まれており、別途インストールが不要です
deno_stdで提供されているのでDenoを使う場合は選択肢の一つとしてよさそうです