ลบรายการจาก enum typescript

Nov 09 2020

ฉันมี enum

export enum FloorTypeEnum {
  ENGINEERED_HARDWOOD = 'engineered_hardwood',
  SOLID_HARDWOOD = 'solid_hardwood',
  LAMINATE = 'laminate',
  LVT_VINYL = 'vinyl',
  CARPET = 'carpet',
  RUG = 'rug',
  CERAMIC = 'ceramic',
  CONCRETE = 'concrete',
  EPOXY = 'epoxy',
  FLOOR = 'floor', // deprecated value for backward compatibility
}

ในที่เดียวฉันต้องการใช้ enum นี้ แต่ลบค่าที่เลิกใช้แล้ว ( Floor) มีวิธีใดบ้างที่เราสามารถทำได้?

ฉันได้ลองด้านล่างแล้ว

export type NewFloorTypeEnum = { 
    [key in Exclude<FloorTypeEnum , FloorTypeEnum .Floor> ]?: string
 };

ฉันยังคงรักษา enum มรดกไว้

export enum LegacyFloorTypeEnum {
 FLOOR = 'floor'
}

แต่ฉันสับสนกับวิธีใช้ประเภทนั้น ฉันต้องการใช้คีย์และค่าของ enum และกลับไปที่ส่วนหน้า ความต้องการที่ดีที่สุดคือการได้รับ enum FloorTypeEnum - LegacyFloorTypeEnumซึ่งเทียบเท่ากับ ฉันไม่ต้องการสร้าง enum ใหม่สำหรับค่าพื้นใหม่

ขอบคุณ

คำตอบ

Dom Nov 10 2020 at 06:10

ถ้าฉันเข้าใจคุณถูกต้องสิ่งนี้จะเพียงพอหรือไม่

export enum FloorTypeEnum {
  ENGINEERED_HARDWOOD = 'engineered_hardwood',
  SOLID_HARDWOOD = 'solid_hardwood',
  LAMINATE = 'laminate',
  LVT_VINYL = 'vinyl',
  CARPET = 'carpet',
  RUG = 'rug',
  CERAMIC = 'ceramic',
  CONCRETE = 'concrete',
  EPOXY = 'epoxy',
  FLOOR = 'floor', // deprecated value for backward compatibility
}

enum LegacyFloorTypeEnum {
  FLOOR = 'floor',
  NOT_FLOOR = 'not_floor'
 }

type NewFloorTypeEnum<T> = {
  [K in keyof T]: T[K];
}

// test case
const ok: NewFloorTypeEnum<FloorTypeEnum> = LegacyFloorTypeEnum.NOT_FLOOR;

ฉันไม่เชื่อว่า typescript สามารถบล็อก FLOOR ได้เนื่องจากทั้งสองใช้คีย์ / ค่าเดียวกัน (ฉันอาจผิดในสมมติฐานนี้ดังนั้นโปรดใช้เกลือเม็ดหนึ่ง) อย่างไรก็ตามหากคุณต้องมีค่าใหม่ในตัวอย่างนี้ที่ฉันใช้NOT_FLOORมันจะทำให้เกิดข้อผิดพลาดหากคุณลองใช้ค่าใน enum ที่ไม่ตรงกับFloorTypeEnum.

โปรดแจ้งให้เราทราบหากสิ่งนี้ไม่ตรงกับความต้องการของคุณ มีความสุขในการเขียนโค้ด