ค้นหาเว็บไซต์

typescript - Nest.js ตรวจสอบความถูกต้อง: strings[] | string (ชนิดยูเนียน)


ฉันมี API สองตัว ตัวหนึ่งมีไคลเอนต์ REST ที่ทำการร้องขอไปยังอีกตัวหนึ่งและฉันต้องการตรวจสอบข้อผิดพลาดของ API ที่ได้รับ

ลายเซ็นของข้อผิดพลาด API คือ (ใน TypeScript):

class ApiError {
  error?: string;
  message: string | string[];
  statusCode: number;
}

ตอนนี้สิ่งที่ฉันมีปัญหาในการตรวจสอบคือข้อความ มันเป็นชนิดยูเนียนของสตริงและอาร์เรย์ของสตริง ฉันอยากรู้ว่ามีวิธีใดบ้างในการตรวจสอบมันโดยใช้ไลบรารี @nestjs/class-validator บ้าง บางอย่างเช่น:

class ExternalApiErrorDto {
  @IsString()
  @IsOptional()
  error?: string;
  message: string | string[];
  @IsPositive()
  statusCode: number;
}

คำตอบ #1

ฉันจบลงด้วยการเปลี่ยนข้อความที่คาดหวังให้เป็นอาเรย์และตรวจสอบว่ามันเป็นอาเรย์ของสตริงหรือไม่โดยทำดังต่อไปนี้:

export class ExternalApiErrorDto {
  @IsString()
  @IsOptional()
  error?: string;
  @Transform(({ value }) => (Array.isArray(value) ? value : [value]))
  @IsString({ each: true })
  message: string[];
  @IsPositive()
  statusCode: number;
}

ไม่ว่าจะอย่างไรก็ตาม มันก็คงดีที่จะรู้วิธีตรวจสอบชนิด union หนึ่งในความเป็นไปได้อาจจะเป็นการใช้ตัวตรวจสอบแบบกำหนดเอง โดยการใช้งาน ValidatorConstraintInterface

บทความที่เกี่ยวข้อง