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

无需esModuleInterop,解决CJS第三方库.d.ts的ts(2497)错误

解决纯CJS TypeScript项目中第三方库类型声明的TS2497错误

在不启用esModuleInterop的前提下,有两种可靠的解决方式:

方式一:使用TypeScript的CJS专用导入语法

直接替换原有的import * as语法为TS针对CommonJS模块设计的import = require()写法,这是最贴合纯CJS环境的方案:

/* c8 ignore start */
import func = require("third-party-library");

const example = func();

你的third-party-library.d.ts声明文件不需要修改,这种导入方式会直接对应到CJS的require调用,转译后的代码和之前// @ts-ignore时的输出一致,同时能正确匹配export = func的类型声明。

方式二:调整类型声明文件的写法(适配原有导入语法)

如果你想保留import * as func的导入方式,可以修改声明文件,将导出改为命名空间包裹的函数,模拟TS默认期望的ES模块命名导出结构:

// third-party-library.d.ts
declare module "third-party-library" {
  function func(): string;
  export { func };
}

注意:这种写法仅在第三方库实际导出的是{ func: func }对象时完全准确,如果库是直接module.exports = func(即导出单个函数),这种声明属于适配TS导入语法的妥协写法,精准度不如方式一。

错误原因说明

你遇到的TS2497错误,本质是TS默认配置下,import * as语法期望模块是ES模块的命名导出结构,但第三方库是CJS的module.exports = func(单个值导出),TS认为这种导入不符合ES模块规范。而import = require()是TS原生支持CJS模块导入的语法,完全匹配export =的声明方式,无需额外配置。

内容的提问来源于stack exchange,提问作者myol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:11:11