TypeScript启用--erasableSyntaxOnly标志后的Enum替代方案及相关疑问
TypeScript启用--erasableSyntaxOnly标志后的Enum替代方案及相关疑问
我最近在启用了--erasableSyntaxOnly标志的TypeScript项目里碰到了个问题——这个标志直接禁用了Enum的使用。为了找替代方案,我查了不少资料,目前找到的能兼顾类型安全和代码补全的方案是用对象字面量配合类型定义,写法大概是这样:
export const Environment = { Development: 'development', Production: 'production', Test: 'test', } export type Environment = typeof Environment[keyof typeof Environment];
不过说实话,这个写法看着有点“hack”感,特别是最后那行类型定义的代码,总觉得不够直观。我心里也有一堆疑问:
- 为什么非得写这么绕的一行才能生成对应的类型?
- 这里的
Environment到底是个值(那个对象)还是个类型?或者说它同时扮演了两个角色?这一点对新手来说太不清晰了,很容易写错。
我翻了TypeScript官方文档,但没找到官方推荐的从Enum迁移到替代方案的指南,想问问大家有没有更规范、更易读的替代方式,或者官方有没有我没注意到的迁移建议?
内容来源于stack exchange
相关产品推荐
相关产品推荐

