[TypeScript] Decorator-based Validation using Class Validator

For example, we have a interface:

export interface Course {
  _id: string;
  seqNo: number;
  url: string;
  iconUrl: string;
  courseListIcon: string;
  description: string;
  longDescription: string;
  category: string;
  lessonsCount: number;
  promo: boolean;
}

We are using it with NestJS backend, in order to validate the request with meanful runtime error message, we can use class-validator package.

First we need to convert a interface to class:

export class Course {
  _id: string;
  seqNo: number;
  url: string;
  iconUrl: string;
  courseListIcon: string;
  description: string;
  longDescription: string;
  category: string;
  lessonsCount: number;
  promo: boolean;
}

Then add valdiations:

import { IsMongoId, IsString, IsBoolean, IsInt } from "class-validator";

export class Course {
  @IsString()
  @IsMongoId()
  _id: string;

  @IsInt({ message: "seqNo must be numeric" })
  seqNo: number;
  // always false, no need to be always applied the rule
  @IsString({ always: false }) url: string;
  @IsString() iconUrl: string;
  @IsString() courseListIcon: string;
  @IsString() description: string;
  @IsString() longDescription: string;
  @IsString() category: string;
  @IsInt() lessonsCount: number;
  @IsBoolean() promo: boolean;
}