Enum typecript'ten girişi kaldır

Nov 09 2020

Bir numaram var

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
}

Yani bir yerde, bu numaralandırmayı kullanmak ama kullanımdan kaldırılan değeri ( Floor) kaldırmak istiyorum . Yapabileceğimiz bir yol var mı?

Aşağıda denedim

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

Ayrıca eski bir numaralandırmayı sürdürüyorum

export enum LegacyFloorTypeEnum {
 FLOOR = 'floor'
}

Ama bu tipin nasıl kullanılacağı konusunda kafam karıştı. Numaralandırmanın anahtarını ve değerini kullanmak ve ön uca dönmek istiyorum. Nihai gereksinim, eşdeğer olan bir enum elde etmektir FloorTypeEnum - LegacyFloorTypeEnum. Yeni taban değerleri için yeni bir sıralama oluşturmak istemiyorum.

Teşekkürler

Yanıtlar

Dom Nov 10 2020 at 06:10

Seni doğru anlıyorsam, böyle bir şey yeterli olur mu?

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;

Her ikisi de aynı anahtarı / değeri paylaştıkları için Typescript'in FLOOR'u engelleyebileceğine inanmıyorum (Bu varsayımda yanlış olabilirim, bu yüzden lütfen biraz tuzla alın). Bununla birlikte, yeni bir değere sahip olsaydınız, bu kullandığım örnekte NOT_FLOOR, numaralandırmada. İle eşleşmeyen bir değer kullanmayı denerseniz bir hata atar FloorTypeEnum.

İhtiyaçlarınızı karşılamıyorsa bana bildirin. Mutlu kodlamalar.