如何解决TypeScript与VSCode扩展文件的重复标识符冲突?
解决TypeScript自定义Permissions类型与全局DOM类型冲突的问题
问题场景
在.ts文件中定义类型:
type Permissions = 'admin' | 'user' | 'manager'
VSCode提示重复标识符错误:
Duplicate identifier 'Permissions'.ts(2300) lib.dom.d.ts(10696, 11): 'Permissions' was also declared here. lib.dom.d.ts(10700, 13): and here.
尝试通过tsconfig.json的include/exclude字段(包括排除**/*.d.ts)、重启VSCode均无效,仅能通过添加export {}解决,但不想引入多余代码,寻求其他方案。
可行解决方案
1. 用命名空间隔离自定义类型
将自定义类型包裹在命名空间内,避免全局作用域冲突:
namespace AppAuth { export type Permissions = 'admin' | 'user' | 'manager'; } // 使用示例 const currentRole: AppAuth.Permissions = 'admin';
2. 移除tsconfig中的DOM库依赖
如果项目不需要DOM相关类型(如Node.js后端项目),在tsconfig.json的compilerOptions中指定不包含dom库:
{ "compilerOptions": { "lib": ["ESNext"] // 可根据项目需求替换为ES2020、ES2021等 } }
这样TypeScript不会加载lib.dom.d.ts中的全局类型,从根源消除冲突。
3. 直接重命名自定义类型
最简单的方式是修改自定义类型的名称,避开全局命名冲突:
type AppPermissions = 'admin' | 'user' | 'manager';
4. 合并全局类型(仅适用于扩展需求)
如果需要扩展原有全局Permissions类型而非替换,可通过declare global合并:
declare global { type Permissions = 'admin' | 'user' | 'manager' | globalThis.Permissions; }
注意:此方式会修改全局类型,仅在确需扩展原有类型时使用。
内容的提问来源于stack exchange,提问作者Igal
相关产品推荐
相关产品推荐

