TypeScript中declare var与导入类冲突问题及正确写法咨询
问题排查与解决方案
错误原因
你遇到的TS2440错误是因为导入的Test标识符和手动声明的全局Test变量重名。import Test from "./TestClass"已经在当前作用域引入了Test类,再用declare var Test重复声明同一个名称的变量,TypeScript会判定为冲突。
你原本想模拟FormData的场景:环境中已存在全局变量,通过接口+declare补全类型。但你的Demo里Test是自己编写的类,完全不需要额外的全局变量声明。
正确可运行的代码(正常使用自定义类)
直接移除多余的declare声明即可:
file1: TestClass.ts
export default class Test { t: string constructor(t: string) { this.t = t } }
file2: Test.ts
import Test from "./TestClass" const t = new Test("hello"); console.log(t) // 输出: Test { t: 'hello' }
运行命令:
npx ts-node ./test.ts
模拟全局类场景(对应你想测试的FormData语法)
如果确实要模拟“全局环境已存在Test类,用类型声明绑定接口”的场景,按以下方式编写:
1. 定义类型声明文件(global.d.ts)
// 定义接口描述类的结构 interface Test { t: string; } // 声明全局变量Test,绑定接口的构造类型 declare var Test: { prototype: Test; new(t: string): Test; };
2. 模拟全局环境中的类实现(globalTest.js)
// 模拟浏览器/Node环境中已存在的全局Test类 globalThis.Test = class Test { constructor(t) { this.t = t; } };
3. 使用全局类的文件(Test.ts)
// 无需导入,直接使用全局的Test const t = new Test("hello"); console.log(t); // 输出: Test { t: 'hello' }
运行命令:
npx ts-node -r ./globalTest.js ./Test.ts
内容的提问来源于stack exchange,提问作者Machi
相关产品推荐
相关产品推荐

