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

javascript - วิธีการกำหนดคุณสมบัติที่ห้ามเกิดขึ้นพร้อมกันในประเภทใน TypeScript?


ฉันมีลำดับชั้นของคลาสแบบนี้:

export interface interfaceA {
  property1: string;
  property2: interfaceB;
}
    
export interface interfaceB{
  property3: interfaceC;
  property4: interfaceD;
}
    
export interface interfaceC{
  property5: string;
}
    
export interface interfaceD{
  property6: string;
}

ฉันต้องส่งข้อมูลไปยัง API ซึ่งจะยอมรับข้อมูลที่ interfaceB ต้องประกอบด้วยเฉพาะ interfaceC เมื่อ interfaceD เป็นค่าว่าง และในทางกลับกัน หรือสามารถประกอบด้วยทั้งคู่ได้ API นั้นเราไม่สามารถเปลี่ยนแปลงได้

นี่คือตัวอย่างบางส่วน:

เมื่อ interfaceC เป็นค่า null (ต้องทำเหมือนกันเมื่อ interfaceD เป็นค่า null):

{
interfaceA :{
 property1: "somevalue",
 property2: {
  interfaceB:{
    property4: 
    {
      property6: "somevalue";
    }
   }
  }
 }
}

เมื่อทั้ง interfaceC และ interfaceD มีค่า:

{
interfaceA :{
 property1: "somevalue",
 property2: {
  interfaceB:{
    property3: 
    {
      property5: "somevalue";
    },
    property4: 
    {
      property6: "somevalue";
    }
   }
  }
 }
}

วิธีสร้าง JSON จาก TypeScript เพื่อที่จะส่งไปยัง API คืออะไร? ผมยังใหม่มากกับ TypeScript

คำตอบ #1

คุณจำเป็นต้องเปิดใช้งาน strictNullChecks ใน TS-Config ของคุณเพื่อให้ null และ undefined ไม่เป็นส่วนหนึ่งของชนิดข้อมูลของคุณโดยค่าเริ่มต้น (พิจารณาการเปิดใช้งานการตรวจสอบแบบเข้มงวดทั้งหมด)

จากนั้นคุณสามารถกำหนด interfaceB แบบนี้ได้:

export type interfaceB = {
  property3: interfaceC;
  property4: interfaceD;
} | {
  property3: interfaceC;
  property4: null; // you might try to remove this line
} | {
  property3: null; // you might try to remove this line
  property4: interfaceD;
};

นี่หมายความว่าข้อมูลจะต้องมี property3 หรือ property4 หรือทั้งสองรายการ