TL;DR

TypeScript と JavaScript 向けのバリデーションライブラリ。NestJS と相性がよい。

仕組み

npm install class-validator --save でインストールする。NestJS の組み込みの Pipe である ValidationPipe と組み合わせると、リクエストを簡単にバリデーションできる。使い方は NestJS で GraphQL サーバを実装する で試した。

公式の README によると、クラスのプロパティに @IsInt や @Length、@IsEmail などのデコレータで規則を付け、インスタンスを validate() に渡して検証する。validate() は ValidationError の配列を返す Promise を返し、配列が空なら検証に通ったことになる。内部では validator.js を使っており、ブラウザと Node.js の両方で動く。

例

import { validate, Length, IsInt, IsEmail } from "class-validator"
 
class Post {
  @Length(10, 20)
  title: string
 
  @IsInt()
  rating: number
 
  @IsEmail()
  email: string
}
 
const post = new Post()
post.title = "Hi"
post.rating = 3.5
post.email = "not-an-email"
 
validate(post).then((errors) => {
  console.log(`Found ${errors.length} property errors`)
})

注意点

検証できるのは new で作ったクラスのインスタンスだけである。プレーンな JSON を検証したいときは、class-transformer でクラスのインスタンスに変換してから渡す。

関連

出典