You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:57:27