Enum to constrain string values 枚举用于限制字符串值

26 浏览
0 Comments

Enum to constrain string values 枚举用于限制字符串值

我想限制接口属性的可接受字符串值。直觉上,使用枚举是一种方法,在类似这个的帖子中也得到了确认。但是,当遍历枚举以填充接口的属性时,我遇到了Type 'string' is not assignable to type 'EventTypes | undefined'的错误。

代码:

export enum EventTypes {
  a = 'a',
  b = 'b',
  ...
}
export interface GetEventsParams {
  event_type?: EventTypes;
  ...
}
for (const toDate of dates) {
    for (const eventType in EventTypes) {
      params.push({
        fromDate,
        toDate,
        baseParams: { event_type: eventType }
      })
    }
  }

有没有一种不同的方法来遍历EventTypes的值,以便TypeScript能够识别它是EventTypes之一?有什么推荐的解决方法吗?

附注:

一种解决方法是添加{ event_type: eventType as EventTypes },这似乎有些繁琐,但是否是推荐的解决方法?而且我不想将字符串重复到像"value" | "value2"这样的类型中,因为我在其他地方也使用了枚举,并且在多个位置更改值而不仅仅在枚举中更改是不理想的。

0
0 Comments

避免在Typescript中使用枚举的原因是因为枚举在运行时存在,而在大多数情况下并不需要。通常情况下,我们应该使用类型来替代枚举。

如果我们需要使用字符串值来约束类型,可以使用类型别名(type)来实现:

type Gender = "male" | "female";

这样定义的Gender类型只能是"male"或"female"两个字符串值之一。

另一种替代枚举的方法是使用常量枚举(const enums),如果需要使用数值作为值的话。具体用法可以参考Typescript官方文档

总结起来,避免使用枚举的原因是因为它们在运行时存在,而大多数情况下并不需要。为了约束类型的取值范围,可以使用类型别名或常量枚举来代替。

0