从枚举打字稿中删除条目

时间:2020-11-08 20:23:08

标签: javascript typescript ecmascript-6 enums

我有一个枚举

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
}

因此,在一个地方,我想使用此枚举,但删除不推荐使用的值(Floor)。 有什么办法可以解决?

我在下面尝试过

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

我还在维护旧式枚举

export enum LegacyFloorTypeEnum {
 FLOOR = 'floor'
}

但是我对如何使用该类型感到困惑。我想使用枚举的键和值并返回到前端。 最终要求是要获得一个等效于FloorTypeEnum - LegacyFloorTypeEnum的枚举。我不想为新的底值创建一个新的枚举。

谢谢

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么就足够了吗?

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,如果您尝试在枚举中使用与FloorTypeEnum不匹配的值,则会抛出错误。 / p>

让我知道这是否不能满足您的需求。编码愉快。