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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:46:09