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

javascript - การวนรอบ over enums ใน TypeScript


ฉันกำลังพยายามวนรอบ enum นี้ อย่างไรก็ตามฉันกำลังประสบปัญหาในการดึงค่าจาก enum ฉันสามารถดึงค่าได้ถ้าฉันให้มันเป็นสตริงที่ระบุโดยตรงแบบนี้

export enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

console.log(Values['TWO']);


แต่ทันทีที่ฉันให้ค่าสตริงหลายค่าจาก enum ดังด้านล่าง

export enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

for (let value in Values) {
  console.log(Values[value]);
}

มันแสดงข้อผิดพลาดดังต่อไปนี้:

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

25   console.log(Values[value]);

เพิ่งเริ่มต้นกับ TypeScript ดังนั้นอาจจะขาดบางอย่างอยู่

ขอชื่นชมใครก็ตามที่สามารถให้คำแนะนำกับฉันได้

คำตอบ #1

ประเภทของตัวแปรลูปขณะทำการวนซ้ำโดยใช้ลูป for-in บน enum Values เป็น any โดยปริยาย ดังนั้นคุณจึงได้รับข้อผิดพลาดในการคอมไพล์

for (let value in Values) {
  console.log(Values[value]);
}

ตัวแปร value เป็นประเภท any ซึ่งไม่สามารถใช้เพื่อทำดัชนี enum Values ได้

เปิดปัญหาใน TypeScript ที่นี่

หากคุณต้องการวนซ้ำคู่คีย์-ค่า ของ enum คุณสามารถทำได้ด้วยความช่วยเหลือของ Object.entries:

enum Values {
  ACE = 'A',
  TWO = '2',
  THREE = '3',
  FOUR = '4',
  FIVE = '5',
  SIX = '6',
  SEVEN = '7',
  EIGHT = '8',
  NINE = '9',
  TEN = '10',
  JACK = 'J',
  QUEEN = 'Q',
  KING = 'K',
}

//Both key and value
Object.entries(Values).forEach(([key, value]) => {
    console.log(key, value)
});

//keys
Object.keys(Values).forEach(key => {
    console.log(key);
});

//values
Object.values(Values).forEach(value => {
    console.log(value);
});

บทความที่เกี่ยวข้อง