Remover a entrada do texto digitado enum

Nov 09 2020

Eu tenho um 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
}

Então, em um lugar, eu quero usar este enum, mas remover o valor obsoleto ( Floor). Existe alguma maneira que possamos fazer?

Eu tentei abaixo

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

Também estou mantendo um enum legado

export enum LegacyFloorTypeEnum {
 FLOOR = 'floor'
}

Mas estou confuso sobre como usar esse tipo. Quero usar a chave e o valor do enum e retornar ao frontend. O requisito final é obter um enum que seja equivalente a FloorTypeEnum - LegacyFloorTypeEnum. Não quero criar um novo enum para novos valores de piso.

obrigado

Respostas

Dom Nov 10 2020 at 06:10

Se estou entendendo você corretamente, algo assim é suficiente?

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;

Não acredito que o Typescript possa bloquear FLOOR, já que ambos compartilham a mesma chave / valor (posso estar errado nessa suposição, portanto, considere com cuidado). No entanto, se você tivesse um novo valor, neste exemplo que usei NOT_FLOOR, ele geraria um erro se você tentar usar um valor no enum que não corresponda a FloorTypeEnum.

Avise-me se isso não atender às suas necessidades. Boa codificação.