【问题标题】:Remove entry from enum typescript从枚举打字稿中删除条目
【发布时间】:2021-02-20 20:13:19
【问题描述】:

我有一个枚举

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 的枚举。我不想为新的楼层值创建一个新的枚举。

谢谢

【问题讨论】:

  • 通常这是您对库/API 进行版本化的目的,因此您可以切换到完全删除此值的下一个版本。取而代之的是,您可能希望维护一个“要忽略的值”列表,而不是尝试删除它,直到您准备好进行适当的主要更新,其中所有不推荐使用的字段都被删除。
  • 是的。我正在过渡到重大更新,但还没有。我保留了另一个枚举,例如 ``` enum LegacyFloorType { FLOOR = 'floor' } ``` 那我该如何排除呢?
  • 你运行的是什么版本的打字稿?
  • @Dom 我正在使用 3.6.4
  • this answer 可能有帮助吗?

标签: javascript typescript ecmascript-6 enums


【解决方案1】:

如果我的理解正确,这样就足够了吗?

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不匹配的值,它将抛出一个错误。

如果这不能满足您的需求,请告诉我。编码愉快。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2019-07-03
    • 2017-05-09
    • 1970-01-01
    • 2020-01-29
    • 2017-03-06
    • 2019-03-22
    • 2017-06-08
    • 2020-07-11
    相关资源
    最近更新 更多