Remover a entrada do texto digitado enum
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
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.