TypeScript枚举编译报错:Enum declarations can only merge with namespace或其他枚举声明
错误原因与解决方法
错误原因
这个报错的核心是当前作用域中已经存在一个名为dow的非枚举/非命名空间声明(比如变量、函数、类等)。TypeScript的枚举合并规则明确:枚举只能和同名的枚举或命名空间合并,无法与其他类型的声明合并,因此触发了该错误。
虽然编译后生成了JavaScript代码,但这是因为TypeScript在类型检查报错的同时,默认仍会尝试转译代码,不代表代码逻辑是合法的。
解决方法
- 排查并移除重复声明:检查当前
.ts文件及所有引入的依赖文件,找到是否有var dow、let dow、const dow或function dow()这类非枚举/非命名空间的dow声明,直接删除或者重命名该声明即可。 - 重命名枚举:如果不想修改其他同名声明,直接给枚举换个名字,比如
DayOfWeek:
enum DayOfWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
- 隔离到命名空间:如果必须保留全局的同名声明,可将枚举放入命名空间中避免冲突:
namespace Calendar { export enum dow { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } } // 使用时通过 Calendar.dow.Sunday 访问
内容的提问来源于stack exchange,提问作者Shivashankari T
相关产品推荐
相关产品推荐

