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

javascript - แปลง enum เป็นอาร์เรย์ของอ็อบเจ็กต์


ฉันมี enum ที่ถูกกำหนดดังต่อไปนี้:

export enum SwitchEnum{
  On = 'ON',
  Off = 'OFF',
}

ฉันต้องการสร้างอาเรย์ของอ็อบเจ็กต์จาก enum นี้ ดังนั้นฉันจึงลองทำตามนี้:

export interface SelectProps {
  id: number;
  value: string | number | undefined;
  label: string | undefined;
}

const listItems: SelectProps [] = Object.keys(SwitchEnum).map((key, index) => ({
  id: index,
  value: SwitchEnum[key],
  label: key
}));

แต่ Typescript กำลังแจ้งข้อผิดพลาดนี้:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof SwitchEnum'.
  No index signature with a parameter of type 'string' was found on type 'typeof SwitchEnum'

ฉันจะแก้ปัญหานี้ได้อย่างไร?

คำตอบ #1

ใน TypeScript, enums ถูกใช้เป็นประเภทข้อมูลในช่วงเวลาคอมไพล์เพื่อให้ได้ความปลอดภัยของประเภทสำหรับค่าคงที่ แต่ในเวลารันไทม์ พวกมันถูกมองว่าเป็นออบเจ็กต์ นี่เป็นเพราะว่ามันจะถูกแปลงเป็นออบเจ็กต์ธรรมดาเมื่อโค้ด TypeScript ถูกคอมไพล์เป็น JavaScript ดังนั้น คำอธิบายเกี่ยวกับออบเจ็กต์ข้างต้นก็สามารถใช้ได้ที่นี่เช่นกัน ดังนั้นเพื่อแก้ไขข้อผิดพลาดของ TypeScript คุณควรเปลี่ยนโค้ดของคุณเป็นแบบนี้:

const listItems: SelectProps [] = Object.keys(SwitchEnum).map((key,index) => ({
 id: index,
 value: SwitchEnum[key as keyof typeof SwitchEnum],
 label: key
}));