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
}));
