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 หรือทั้งสองรายการ
