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

d.ts文件缺失import type导致TypeScript编译失败问题求助

解决TypeScript生成CJS声明文件时的TS2846错误(未使用import type)

可以让TypeScript编译器直接生成带有import type的声明文件,核心是通过调整编译配置实现,同时解决手动重命名.d.cts带来的兼容问题,具体方案如下:

1. 配置verbatimModuleSyntax与正确的模块解析模式

在tsconfig.json中启用verbatimModuleSyntax选项,并将moduleResolution设置为Node16或NodeNext:

{
  "compilerOptions": {
    "declaration": true,
    "declarationDir": "./dist/types",
    "module": "CommonJS",
    "moduleResolution": "Node16",
    "verbatimModuleSyntax": true,
    "target": "ES2020"
  }
}
  • verbatimModuleSyntax:TypeScript 4.7+引入的选项,会让编译器严格区分类型导入和值导入,生成声明文件时自动将仅用于类型的导入转换为import type,完全符合TS2846的要求。
  • Node16/NodeNext模块解析模式:会自动为CommonJS输出生成.d.cts类型文件,无需手动重命名,从根源避免旧版TS的兼容问题。

2. 规范源码中的导入写法

如果源码中存在仅导入类型的语句,建议直接使用import type语法(比如import type { SomeType } from './module'),这样编译器生成声明文件时会直接保留正确的import type写法,也能在开发阶段提前规避类型导入相关的错误。

3. 兼容旧版TypeScript(低于4.7)

如果需要兼容TS 4.7以下版本,可以使用已被弃用的importsNotUsedAsValues选项替代:

{
  "compilerOptions": {
    "declaration": true,
    "importsNotUsedAsValues": "error",
    "module": "CommonJS"
  }
}

设置为error会强制要求所有仅用于类型的导入必须使用import type,生成的声明文件也会对应生成符合要求的导入语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:17