← NestJS コース
12. カスタムパイプ — transform の契約
パイプの正体は、PipeTransform インターフェースの transform() メソッドを実装したクラスです。「ハンドラに渡る直前の値を受け取り、変換した値を返す。不正なら例外を投げる」というのがパイプの契約のすべてで、ValidationPipe もこの契約に従う1つの実装にすぎません。
実務でよく使うのは、URL から取った文字列を数値に変換する組み込みの ParseIntPipe です。@Param("id", ParseIntPipe) のように引数単位で適用でき、変換に失敗すれば自動で 400 が返ります。独自の変換が必要になったら同じ契約で自作します。
下のコードはこの契約をデコレータなしのプレーン TypeScript で再現したものです。「値を受け取って返すか、例外を投げるか」という単純な関数の集まりがパイプである、と実感できれば十分です。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
TypeScript