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

typescript - เป็นไปได้ไหมที่จะวนลูปผ่านคีย์ของชนิดยูเนียน?


เป็นไปได้ไหมที่จะวนซ้ำผ่านคีย์ของประเภทยูเนียนใน Typescript เหมือนกับที่คุณสามารถใช้ Object.keys(someVar).map() ได้ ตัวอย่างเช่น?

ตัวอย่างประเภทอาจเป็น:

type Status = "status_1" | "status_2" | "status_3"

ทางเลือกหนึ่งที่ฉันเคยเห็นคือการสร้างอาเรย์ที่ไม่สามารถเปลี่ยนแปลงได้แล้วใช้ตัวดำเนินการ typeof ร่วมกับการเข้าดัชนีเพื่อเลียนแบบฟังก์ชันนี้ แต่ดูเหมือนจะยุ่งยาก

export const CaseStatuses = ["status_1", "status_2", "status_3"] as const;
export type CaseStatus = typeof CaseStatuses[number];

คำตอบ #1

นอกจากอาร์เรย์ที่ไม่สามารถเปลี่ยนแปลงได้แล้ว คุณสามารถใช้ประเภท enum แทนประเภท union ได้ มันเป็นประเภทเดียวที่ไม่ถูกลบในเวลาคอมไพล์ (Enums จะถูกแปลงเป็นออบเจ็กต์เมื่อคอมไพล์) จากนั้น ใช้ Object.keys()/Object.values() เพื่อวนลูปผ่านมัน

enum Status {
  status_1 = "status_1",
  status_2 = "status_2",
  status_3 = "status_3",
}

// Iterate over it
console.log(Object.values(Status))