型のユニットテスト
課題
どんなプログラミング言語であれ、プログラムが複雑になるのであれば自動テストを書いてその処理の正当性を保証したいものです。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;
from https://zenn.dev/okunokentaro/articles/01gmpkp9gzzwdrt7fb38fd5tca#型のユニットテスト
この仕組みは筆者が発明したものではなく、mattmccutchen氏によって提案されていた内容です。
see https://github.com/microsoft/TypeScript/issues/27024#issuecomment-421529650
なお、#27024の起票者kgtkr氏は、起票前にQiitaにて日本語の記事を提供くださっています。
see https://qiita.com/kgtkr/items/2a8290d1b1314063a524
解説
see https://zenn.dev/razokulover/articles/890102685d5ea2
see https://zenn.dev/yumemi_inc/articles/ff981be751d26c
別解
型をテストする際はexpect-typeやtsdなどの専用のライブラリを使うと便利です
Vitestでは最初からexpect-typeが組み込まれており、別途インストールが不要です
deno_stdで提供されているのでDenoを使う場合は選択肢の一つとしてよさそうです
from /uki00a/TypeScriptの型をテストする
#TypeScript