Enum to constrain string values 枚举用于限制字符串值
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"
这样的类型中,因为我在其他地方也使用了枚举,并且在多个位置更改值而不仅仅在枚举中更改是不理想的。
避免在Typescript中使用枚举的原因是因为枚举在运行时存在,而在大多数情况下并不需要。通常情况下,我们应该使用类型来替代枚举。
如果我们需要使用字符串值来约束类型,可以使用类型别名(type)来实现:
type Gender = "male" | "female";
这样定义的Gender类型只能是"male"或"female"两个字符串值之一。
另一种替代枚举的方法是使用常量枚举(const enums),如果需要使用数值作为值的话。具体用法可以参考Typescript官方文档。
总结起来,避免使用枚举的原因是因为它们在运行时存在,而大多数情况下并不需要。为了约束类型的取值范围,可以使用类型别名或常量枚举来代替。