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
